1 from __future__
import absolute_import
3 from django
.contrib
.auth
.models
import User
4 from django
.contrib
.contenttypes
.models
import ContentType
5 from django
.contrib
.contenttypes
import generic
6 from django
.db
import models
9 class Review(models
.Model
):
10 source
= models
.CharField(max_length
=100)
11 content_type
= models
.ForeignKey(ContentType
)
12 object_id
= models
.PositiveIntegerField()
13 content_object
= generic
.GenericForeignKey()
15 def __unicode__(self
):
19 ordering
= ('source',)
21 class PersonManager(models
.Manager
):
22 def get_by_natural_key(self
, name
):
23 return self
.get(name
=name
)
25 class Person(models
.Model
):
26 objects
= PersonManager()
27 name
= models
.CharField(max_length
=100)
29 def __unicode__(self
):
35 # This book manager doesn't do anything interesting; it just
36 # exists to strip out the 'extra_arg' argument to certain
37 # calls. This argument is used to establish that the BookManager
38 # is actually getting used when it should be.
39 class BookManager(models
.Manager
):
40 def create(self
, *args
, **kwargs
):
41 kwargs
.pop('extra_arg', None)
42 return super(BookManager
, self
).create(*args
, **kwargs
)
44 def get_or_create(self
, *args
, **kwargs
):
45 kwargs
.pop('extra_arg', None)
46 return super(BookManager
, self
).get_or_create(*args
, **kwargs
)
48 class Book(models
.Model
):
49 objects
= BookManager()
50 title
= models
.CharField(max_length
=100)
51 published
= models
.DateField()
52 authors
= models
.ManyToManyField(Person
)
53 editor
= models
.ForeignKey(Person
, null
=True, related_name
='edited')
54 reviews
= generic
.GenericRelation(Review
)
55 pages
= models
.IntegerField(default
=100)
57 def __unicode__(self
):
63 class Pet(models
.Model
):
64 name
= models
.CharField(max_length
=100)
65 owner
= models
.ForeignKey(Person
)
67 def __unicode__(self
):
73 class UserProfile(models
.Model
):
74 user
= models
.OneToOneField(User
, null
=True)
75 flavor
= models
.CharField(max_length
=100)
78 ordering
= ('flavor',)