Statistics
| Branch: | Revision:

root / taggit / tests / models.py @ 04733cdb

History | View | Annotate | Download (3.1 kB)

1
from django.db import models
2

    
3
from taggit.managers import TaggableManager
4
from taggit.models import (TaggedItemBase, GenericTaggedItemBase, TaggedItem,
5
    TagBase, Tag)
6

    
7

    
8
class Food(models.Model):
9
    name = models.CharField(max_length=50)
10

    
11
    tags = TaggableManager()
12

    
13
    def __unicode__(self):
14
        return self.name
15

    
16
class Pet(models.Model):
17
    name = models.CharField(max_length=50)
18

    
19
    tags = TaggableManager()
20

    
21
    def __unicode__(self):
22
        return self.name
23

    
24
class HousePet(Pet):
25
    trained = models.BooleanField()
26

    
27

    
28
# Test direct-tagging with custom through model
29

    
30
class TaggedFood(TaggedItemBase):
31
    content_object = models.ForeignKey('DirectFood')
32

    
33
class TaggedPet(TaggedItemBase):
34
    content_object = models.ForeignKey('DirectPet')
35

    
36
class DirectFood(models.Model):
37
    name = models.CharField(max_length=50)
38

    
39
    tags = TaggableManager(through="TaggedFood")
40

    
41
class DirectPet(models.Model):
42
    name = models.CharField(max_length=50)
43

    
44
    tags = TaggableManager(through=TaggedPet)
45

    
46
    def __unicode__(self):
47
        return self.name
48

    
49
class DirectHousePet(DirectPet):
50
    trained = models.BooleanField()
51

    
52

    
53
# Test custom through model to model with custom PK
54

    
55
class TaggedCustomPKFood(TaggedItemBase):
56
    content_object = models.ForeignKey('CustomPKFood')
57

    
58
class TaggedCustomPKPet(TaggedItemBase):
59
    content_object = models.ForeignKey('CustomPKPet')
60

    
61
class CustomPKFood(models.Model):
62
    name = models.CharField(max_length=50, primary_key=True)
63

    
64
    tags = TaggableManager(through=TaggedCustomPKFood)
65

    
66
    def __unicode__(self):
67
        return self.name
68

    
69
class CustomPKPet(models.Model):
70
    name = models.CharField(max_length=50, primary_key=True)
71

    
72
    tags = TaggableManager(through=TaggedCustomPKPet)
73

    
74
    def __unicode__(self):
75
        return self.name
76

    
77
class CustomPKHousePet(CustomPKPet):
78
    trained = models.BooleanField()
79

    
80
# Test custom through model to a custom tag model
81

    
82
class OfficialTag(TagBase):
83
    official = models.BooleanField()
84

    
85
class OfficialThroughModel(GenericTaggedItemBase):
86
    tag = models.ForeignKey(OfficialTag, related_name="tagged_items")
87

    
88
class OfficialFood(models.Model):
89
    name = models.CharField(max_length=50)
90

    
91
    tags = TaggableManager(through=OfficialThroughModel)
92

    
93
    def __unicode__(self):
94
        return self.name
95

    
96
class OfficialPet(models.Model):
97
    name = models.CharField(max_length=50)
98

    
99
    tags = TaggableManager(through=OfficialThroughModel)
100

    
101
    def __unicode__(self):
102
        return self.name
103

    
104
class OfficialHousePet(OfficialPet):
105
    trained = models.BooleanField()
106

    
107

    
108
class Media(models.Model):
109
    tags = TaggableManager()
110

    
111
    class Meta:
112
        abstract = True
113

    
114
class Photo(Media):
115
    pass
116

    
117
class Movie(Media):
118
    pass
119

    
120

    
121
class ArticleTag(Tag):
122
    class Meta:
123
        proxy = True
124

    
125
    def slugify(self, tag, i=None):
126
        slug = "category-%s" % tag.lower()
127

    
128
        if i is not None:
129
            slug += "-%d" % i
130
        return slug
131

    
132
class ArticleTaggedItem(TaggedItem):
133
    class Meta:
134
        proxy = True
135

    
136
    @classmethod
137
    def tag_model(self):
138
        return ArticleTag
139

    
140
class Article(models.Model):
141
    title = models.CharField(max_length=100)
142

    
143
    tags = TaggableManager(through=ArticleTaggedItem)