1
from datetime import datetime
3
from django.db import models
4
from django.utils.encoding import python_2_unicode_compatible
7
# M2M described on one of the models
8
@python_2_unicode_compatible
9
class Person(models.Model):
10
name = models.CharField(max_length=128)
18
@python_2_unicode_compatible
19
class Group(models.Model):
20
name = models.CharField(max_length=128)
21
members = models.ManyToManyField(Person, through='Membership')
22
custom_members = models.ManyToManyField(Person, through='CustomMembership', related_name="custom")
23
nodefaultsnonulls = models.ManyToManyField(Person, through='TestNoDefaultsOrNulls', related_name="testnodefaultsnonulls")
31
@python_2_unicode_compatible
32
class Membership(models.Model):
33
person = models.ForeignKey(Person)
34
group = models.ForeignKey(Group)
35
date_joined = models.DateTimeField(default=datetime.now)
36
invite_reason = models.CharField(max_length=64, null=True)
39
ordering = ('date_joined', 'invite_reason', 'group')
42
return "%s is a member of %s" % (self.person.name, self.group.name)
44
@python_2_unicode_compatible
45
class CustomMembership(models.Model):
46
person = models.ForeignKey(Person, db_column="custom_person_column", related_name="custom_person_related_name")
47
group = models.ForeignKey(Group)
48
weird_fk = models.ForeignKey(Membership, null=True)
49
date_joined = models.DateTimeField(default=datetime.now)
52
return "%s is a member of %s" % (self.person.name, self.group.name)
55
db_table = "test_table"
57
class TestNoDefaultsOrNulls(models.Model):
58
person = models.ForeignKey(Person)
59
group = models.ForeignKey(Group)
60
nodefaultnonull = models.CharField(max_length=5)
62
@python_2_unicode_compatible
63
class PersonSelfRefM2M(models.Model):
64
name = models.CharField(max_length=5)
65
friends = models.ManyToManyField('self', through="Friendship", symmetrical=False)
70
class Friendship(models.Model):
71
first = models.ForeignKey(PersonSelfRefM2M, related_name="rel_from_set")
72
second = models.ForeignKey(PersonSelfRefM2M, related_name="rel_to_set")
73
date_friended = models.DateTimeField()