parts/django/tests/regressiontests/m2m_through_regress/models.py
changeset 69 c6bca38c1cbf
equal deleted inserted replaced
68:5ff1fc726848 69:c6bca38c1cbf
       
     1 from datetime import datetime
       
     2 
       
     3 from django.contrib.auth.models import User
       
     4 from django.core import management
       
     5 from django.db import models
       
     6 
       
     7 
       
     8 # Forward declared intermediate model
       
     9 class Membership(models.Model):
       
    10     person = models.ForeignKey('Person')
       
    11     group = models.ForeignKey('Group')
       
    12     price = models.IntegerField(default=100)
       
    13 
       
    14     def __unicode__(self):
       
    15         return "%s is a member of %s" % (self.person.name, self.group.name)
       
    16 
       
    17 # using custom id column to test ticket #11107
       
    18 class UserMembership(models.Model):
       
    19     id = models.AutoField(db_column='usermembership_id', primary_key=True)
       
    20     user = models.ForeignKey(User)
       
    21     group = models.ForeignKey('Group')
       
    22     price = models.IntegerField(default=100)
       
    23 
       
    24     def __unicode__(self):
       
    25         return "%s is a user and member of %s" % (self.user.username, self.group.name)
       
    26 
       
    27 class Person(models.Model):
       
    28     name = models.CharField(max_length=128)
       
    29 
       
    30     def __unicode__(self):
       
    31         return self.name
       
    32 
       
    33 class Group(models.Model):
       
    34     name = models.CharField(max_length=128)
       
    35     # Membership object defined as a class
       
    36     members = models.ManyToManyField(Person, through=Membership)
       
    37     user_members = models.ManyToManyField(User, through='UserMembership')
       
    38 
       
    39     def __unicode__(self):
       
    40         return self.name
       
    41 
       
    42 # A set of models that use an non-abstract inherited model as the 'through' model.
       
    43 class A(models.Model):
       
    44     a_text = models.CharField(max_length=20)
       
    45 
       
    46 class ThroughBase(models.Model):
       
    47     a = models.ForeignKey(A)
       
    48     b = models.ForeignKey('B')
       
    49 
       
    50 class Through(ThroughBase):
       
    51     extra = models.CharField(max_length=20)
       
    52 
       
    53 class B(models.Model):
       
    54     b_text = models.CharField(max_length=20)
       
    55     a_list = models.ManyToManyField(A, through=Through)