1
from __future__ import unicode_literals
1
3
from django.contrib.auth.models import User
2
4
from django.db import models
5
from django.utils.encoding import python_2_unicode_compatible
5
8
# Forward declared intermediate model
9
@python_2_unicode_compatible
6
10
class Membership(models.Model):
7
11
person = models.ForeignKey('Person')
8
12
group = models.ForeignKey('Group')
9
13
price = models.IntegerField(default=100)
11
def __unicode__(self):
12
16
return "%s is a member of %s" % (self.person.name, self.group.name)
14
18
# using custom id column to test ticket #11107
19
@python_2_unicode_compatible
15
20
class UserMembership(models.Model):
16
21
id = models.AutoField(db_column='usermembership_id', primary_key=True)
17
22
user = models.ForeignKey(User)
18
23
group = models.ForeignKey('Group')
19
24
price = models.IntegerField(default=100)
21
def __unicode__(self):
22
27
return "%s is a user and member of %s" % (self.user.username, self.group.name)
29
@python_2_unicode_compatible
24
30
class Person(models.Model):
25
31
name = models.CharField(max_length=128)
27
def __unicode__(self):
36
@python_2_unicode_compatible
30
37
class Group(models.Model):
31
38
name = models.CharField(max_length=128)
32
39
# Membership object defined as a class
33
40
members = models.ManyToManyField(Person, through=Membership)
34
41
user_members = models.ManyToManyField(User, through='UserMembership')
36
def __unicode__(self):
39
46
# A set of models that use an non-abstract inherited model as the 'through' model.
55
62
# Using to_field on the through model
63
@python_2_unicode_compatible
56
64
class Car(models.Model):
57
65
make = models.CharField(max_length=20, unique=True, null=True)
58
66
drivers = models.ManyToManyField('Driver', through='CarDriver')
60
def __unicode__(self, ):
61
69
return "%s" % self.make
71
@python_2_unicode_compatible
63
72
class Driver(models.Model):
64
73
name = models.CharField(max_length=20, unique=True, null=True)
66
def __unicode__(self):
67
76
return "%s" % self.name
70
79
ordering = ('name',)
81
@python_2_unicode_compatible
72
82
class CarDriver(models.Model):
73
83
car = models.ForeignKey('Car', to_field='make')
74
84
driver = models.ForeignKey('Driver', to_field='name')
76
def __unicode__(self, ):
77
return u"pk=%s car=%s driver=%s" % (str(self.pk), self.car, self.driver)
87
return "pk=%s car=%s driver=%s" % (str(self.pk), self.car, self.driver)