summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2015-01-22 01:43:49 -0500
committerSimon Charette <charette.s@gmail.com>2015-01-29 14:42:28 -0500
commita301061f88268255fc2660ca993a84b8bf12f9d2 (patch)
treefee7823f5f53fee828b979837aa99e48e00c7a8e /tests
parent7b92acea7055c6b39207a813b52e683a3672e467 (diff)
[1.8.x] Fixed #23940 -- Allowed model fields to be named `exact`.
An explicit `__exact` lookup in the related managers filters was interpreted as a reference to a foreign `exact` field. Thanks to Trac alias zhiyajun11 for the report, Josh for the investigation, Loïc for the test name and Tim for the review. Backport of eb4cdfbdd64a95b303eaaa40a070521aa58362fd from master
Diffstat (limited to 'tests')
-rw-r--r--tests/managers_regress/models.py5
-rw-r--r--tests/managers_regress/tests.py8
2 files changed, 11 insertions, 2 deletions
diff --git a/tests/managers_regress/models.py b/tests/managers_regress/models.py
index c8869f1e26..99494448bd 100644
--- a/tests/managers_regress/models.py
+++ b/tests/managers_regress/models.py
@@ -129,6 +129,7 @@ class Child7(Parent):
@python_2_unicode_compatible
class RelatedModel(models.Model):
test_gfk = GenericRelation('RelationModel', content_type_field='gfk_ctype', object_id_field='gfk_id')
+ exact = models.NullBooleanField()
def __str__(self):
return force_text(self.pk)
@@ -140,8 +141,8 @@ class RelationModel(models.Model):
m2m = models.ManyToManyField(RelatedModel, related_name='test_m2m')
- gfk_ctype = models.ForeignKey(ContentType)
- gfk_id = models.IntegerField()
+ gfk_ctype = models.ForeignKey(ContentType, null=True)
+ gfk_id = models.IntegerField(null=True)
gfk = GenericForeignKey(ct_field='gfk_ctype', fk_field='gfk_id')
def __str__(self):
diff --git a/tests/managers_regress/tests.py b/tests/managers_regress/tests.py
index 0d24873a10..af507f0b75 100644
--- a/tests/managers_regress/tests.py
+++ b/tests/managers_regress/tests.py
@@ -201,3 +201,11 @@ class ManagersRegressionTests(TestCase):
t.render(Context({'related': related})),
''.join([force_text(relation.pk)] * 3),
)
+
+ def test_field_can_be_called_exact(self):
+ # Make sure related managers core filters don't include an
+ # explicit `__exact` lookup that could be interpreted as a
+ # reference to a foreign `exact` field. refs #23940.
+ related = RelatedModel.objects.create(exact=False)
+ relation = related.test_fk.create()
+ self.assertEqual(related.test_fk.get(), relation)