parts/django/tests/modeltests/m2m_through/models.py
changeset 307 c6bca38c1cbf
equal deleted inserted replaced
306:5ff1fc726848 307:c6bca38c1cbf
       
     1 from django.db import models
       
     2 from datetime import datetime
       
     3 
       
     4 # M2M described on one of the models
       
     5 class Person(models.Model):
       
     6     name = models.CharField(max_length=128)
       
     7 
       
     8     class Meta:
       
     9         ordering = ('name',)
       
    10 
       
    11     def __unicode__(self):
       
    12         return self.name
       
    13 
       
    14 class Group(models.Model):
       
    15     name = models.CharField(max_length=128)
       
    16     members = models.ManyToManyField(Person, through='Membership')
       
    17     custom_members = models.ManyToManyField(Person, through='CustomMembership', related_name="custom")
       
    18     nodefaultsnonulls = models.ManyToManyField(Person, through='TestNoDefaultsOrNulls', related_name="testnodefaultsnonulls")
       
    19 
       
    20     class Meta:
       
    21         ordering = ('name',)
       
    22 
       
    23     def __unicode__(self):
       
    24         return self.name
       
    25 
       
    26 class Membership(models.Model):
       
    27     person = models.ForeignKey(Person)
       
    28     group = models.ForeignKey(Group)
       
    29     date_joined = models.DateTimeField(default=datetime.now)
       
    30     invite_reason = models.CharField(max_length=64, null=True)
       
    31 
       
    32     class Meta:
       
    33         ordering = ('date_joined', 'invite_reason', 'group')
       
    34 
       
    35     def __unicode__(self):
       
    36         return "%s is a member of %s" % (self.person.name, self.group.name)
       
    37 
       
    38 class CustomMembership(models.Model):
       
    39     person = models.ForeignKey(Person, db_column="custom_person_column", related_name="custom_person_related_name")
       
    40     group = models.ForeignKey(Group)
       
    41     weird_fk = models.ForeignKey(Membership, null=True)
       
    42     date_joined = models.DateTimeField(default=datetime.now)
       
    43 
       
    44     def __unicode__(self):
       
    45         return "%s is a member of %s" % (self.person.name, self.group.name)
       
    46 
       
    47     class Meta:
       
    48         db_table = "test_table"
       
    49 
       
    50 class TestNoDefaultsOrNulls(models.Model):
       
    51     person = models.ForeignKey(Person)
       
    52     group = models.ForeignKey(Group)
       
    53     nodefaultnonull = models.CharField(max_length=5)
       
    54 
       
    55 class PersonSelfRefM2M(models.Model):
       
    56     name = models.CharField(max_length=5)
       
    57     friends = models.ManyToManyField('self', through="Friendship", symmetrical=False)
       
    58 
       
    59     def __unicode__(self):
       
    60         return self.name
       
    61 
       
    62 class Friendship(models.Model):
       
    63     first = models.ForeignKey(PersonSelfRefM2M, related_name="rel_from_set")
       
    64     second = models.ForeignKey(PersonSelfRefM2M, related_name="rel_to_set")
       
    65     date_friended = models.DateTimeField()