Permalink
Browse files

Fixed #20378 -- regression in GenericRelation on abstract model

When a GenericRelation was defined on abstract model, queries on childs
of the abstract model didn't work. The problem was in the way fields and
in particular field.rel was copied from models to their children.

The regression was likely caused by #19385. Thanks to Gavin Wahl for
spotting the regression.
  • Loading branch information...
1 parent d9d24c4 commit c9a96075fa02b6d52bec748ffdfb413688a15774 @akaariai akaariai committed May 20, 2013
@@ -157,6 +157,8 @@ def __deepcopy__(self, memodict):
obj = copy.copy(self)
if self.rel:
obj.rel = copy.copy(self.rel)
+ if hasattr(self.rel, 'field') and self.rel.field is self:
+ obj.rel.field = obj
memodict[id(self)] = obj
return obj
@@ -122,3 +122,12 @@ class Tag(models.Model):
class Board(models.Model):
name = models.CharField(primary_key=True, max_length=15)
+
+class HasLinks(models.Model):
+ links = generic.GenericRelation(Link)
+
+ class Meta:
+ abstract = True
+
+class HasLinkThing(HasLinks):
+ pass
@@ -4,7 +4,7 @@
from .models import (Address, Place, Restaurant, Link, CharLink, TextLink,
Person, Contact, Note, Organization, OddRelation1, OddRelation2, Company,
- Developer, Team, Guild, Tag, Board)
+ Developer, Team, Guild, Tag, Board, HasLinkThing)
class GenericRelationTests(TestCase):
@@ -135,3 +135,21 @@ def test_gfk_to_model_with_empty_pk(self):
b1 = Board.objects.create(name='')
tag = Tag(label='VP', content_object=b1)
tag.save()
+
+ def test_ticket_20378(self):
+ hs1 = HasLinkThing.objects.create()
+ hs2 = HasLinkThing.objects.create()
+ l1 = Link.objects.create(content_object=hs1)
+ l2 = Link.objects.create(content_object=hs2)
+ self.assertQuerysetEqual(
+ HasLinkThing.objects.filter(links=l1),
+ [hs1], lambda x: x)
+ self.assertQuerysetEqual(
+ HasLinkThing.objects.filter(links=l2),
+ [hs2], lambda x: x)
+ self.assertQuerysetEqual(
+ HasLinkThing.objects.exclude(links=l2),
+ [hs1], lambda x: x)
+ self.assertQuerysetEqual(
+ HasLinkThing.objects.exclude(links=l1),
+ [hs2], lambda x: x)

0 comments on commit c9a9607

Please sign in to comment.