Commit c92f7473 by Alex Gaynor

Fixes #42. Putting a taggable manager on an abstract model now works.

parent 32bc5b00
...@@ -65,7 +65,7 @@ class TaggableManager(RelatedField): ...@@ -65,7 +65,7 @@ class TaggableManager(RelatedField):
self.model = cls self.model = cls
cls._meta.add_field(self) cls._meta.add_field(self)
setattr(cls, name, self) setattr(cls, name, self)
if self.use_gfk: if self.use_gfk and not cls._meta.abstract:
tagged_items = GenericRelation(self.through) tagged_items = GenericRelation(self.through)
tagged_items.contribute_to_class(cls, "tagged_items") tagged_items.contribute_to_class(cls, "tagged_items")
......
...@@ -103,3 +103,15 @@ class OfficialPet(models.Model): ...@@ -103,3 +103,15 @@ class OfficialPet(models.Model):
class OfficialHousePet(OfficialPet): class OfficialHousePet(OfficialPet):
trained = models.BooleanField() trained = models.BooleanField()
class Media(models.Model):
tags = TaggableManager()
class Meta:
abstract = True
class Photo(Media):
pass
class Movie(Media):
pass
...@@ -8,7 +8,7 @@ from taggit.tests.forms import (FoodForm, DirectFoodForm, CustomPKFoodForm, ...@@ -8,7 +8,7 @@ from taggit.tests.forms import (FoodForm, DirectFoodForm, CustomPKFoodForm,
from taggit.tests.models import (Food, Pet, HousePet, DirectFood, DirectPet, from taggit.tests.models import (Food, Pet, HousePet, DirectFood, DirectPet,
DirectHousePet, TaggedPet, CustomPKFood, CustomPKPet, CustomPKHousePet, DirectHousePet, TaggedPet, CustomPKFood, CustomPKPet, CustomPKHousePet,
TaggedCustomPKPet, OfficialFood, OfficialPet, OfficialHousePet, TaggedCustomPKPet, OfficialFood, OfficialPet, OfficialHousePet,
OfficialThroughModel, OfficialTag) OfficialThroughModel, OfficialTag, Photo, Movie)
from taggit.utils import parse_tags, edit_string_for_tags from taggit.utils import parse_tags, edit_string_for_tags
...@@ -212,6 +212,21 @@ class TaggableManagerTestCase(BaseTaggingTestCase): ...@@ -212,6 +212,21 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
unicode(self.taggeditem_model.objects.all()[0]), unicode(self.taggeditem_model.objects.all()[0]),
"ross tagged with president" "ross tagged with president"
) )
def test_abstract_subclasses(self):
p = Photo.objects.create()
p.tags.add("outdoors", "pretty")
self.assert_tags_equal(
p.tags.all(),
["outdoors", "pretty"]
)
m = Movie.objects.create()
m.tags.add("hd")
self.assert_tags_equal(
m.tags.all(),
["hd"],
)
class TaggableManagerDirectTestCase(TaggableManagerTestCase): class TaggableManagerDirectTestCase(TaggableManagerTestCase):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment