summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorVlastimil Zíma <vlastimil.zima@nic.cz>2014-05-19 18:19:35 +0200
committerTim Graham <timograham@gmail.com>2014-06-20 12:49:56 -0400
commit6e5a7367524d3e3abd3d0f60f2e8a41796908101 (patch)
tree6088ef26174efe330776f9db494040d6f684227f /tests
parentd9a83d597ee5aa510cf1aaa086e2fc3f1d7ee4c6 (diff)
[1.7.x] Fixed #22514 -- Prevented indexes on virtual fields [postgres].
Backport of 78c32f1caa from master
Diffstat (limited to 'tests')
-rw-r--r--tests/indexes/models.py25
-rw-r--r--tests/indexes/tests.py7
2 files changed, 32 insertions, 0 deletions
diff --git a/tests/indexes/models.py b/tests/indexes/models.py
index 064a099b40..c3d43913dd 100644
--- a/tests/indexes/models.py
+++ b/tests/indexes/models.py
@@ -2,10 +2,35 @@ from django.db import connection
from django.db import models
+class CurrentTranslation(models.ForeignObject):
+ """
+ Creates virtual relation to the translation with model cache enabled.
+ """
+ # Avoid validation
+ requires_unique_target = False
+
+ def __init__(self, to, from_fields, to_fields, **kwargs):
+ # Disable reverse relation
+ kwargs['related_name'] = '+'
+ # Set unique to enable model cache.
+ kwargs['unique'] = True
+ super(CurrentTranslation, self).__init__(to, from_fields, to_fields, **kwargs)
+
+
+class ArticleTranslation(models.Model):
+
+ article = models.ForeignKey('indexes.Article')
+ language = models.CharField(max_length=10, unique=True)
+ content = models.TextField()
+
+
class Article(models.Model):
headline = models.CharField(max_length=100)
pub_date = models.DateTimeField()
+ # Add virtual relation to the ArticleTranslation model.
+ translation = CurrentTranslation(ArticleTranslation, ['id'], ['article'])
+
class Meta:
index_together = [
["headline", "pub_date"],
diff --git a/tests/indexes/tests.py b/tests/indexes/tests.py
index 82b69ab192..786c6b5cb4 100644
--- a/tests/indexes/tests.py
+++ b/tests/indexes/tests.py
@@ -29,3 +29,10 @@ class IndexesTests(TestCase):
# unique=True and db_index=True should only create the varchar-specific
# index (#19441).
self.assertIn('("slug" varchar_pattern_ops)', index_sql[4])
+
+ @skipUnless(connection.vendor == 'postgresql',
+ "This is a postgresql-specific issue")
+ def test_postgresql_virtual_relation_indexes(self):
+ """Test indexes are not created for related objects"""
+ index_sql = connection.creation.sql_indexes_for_model(Article, no_style())
+ self.assertEqual(len(index_sql), 1)