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