Django

Code

Ticket #6095: manual_m2m_tests_questions.txt

File manual_m2m_tests_questions.txt, 4.4 kB (added by floguy, 1 year ago)

Test cases

Line 
1 from django.db import models
2 from datetime import datetime
3
4 # M2M described on one of the models
5 class PersonExplicitOneWay(models.Model):
6     name = models.CharField(max_length=128)
7
8     def __unicode__(self):
9         return self.name
10
11 class GroupExplicitOneWay(models.Model):
12     name = models.CharField(max_length=128)
13     members = models.ManyToManyField(PersonExplicitOneWay, through='MembershipExplicitOneWay')
14    
15     def __unicode__(self):
16         return self.name
17
18 class MembershipExplicitOneWay(models.Model):
19     person = models.ForeignKey(PersonExplicitOneWay)
20     group = models.ForeignKey(GroupExplicitOneWay)
21     date_joined = models.DateTimeField(default=datetime.now)
22
23 >>> bob = PersonExplicitOneWay(name = 'Bob')
24 >>> bob.save()
25 >>> jim = PersonExplicitOneWay(name = 'Jim')
26 >>> jim.save()
27 >>> jane = PersonExplicitOneWay(name = 'Jane')
28 >>> jane.save()
29 >>> rock = GroupExplicitOneWay(name = 'Rock')
30 >>> rock.save()
31 >>> roll = GroupExplicitOneWay(name = 'Roll')
32 >>> roll.save()
33
34 >>> rock.members.add(jim, jane)
35 >>> rock.members.all()
36 [<PersonExplicitOneWay: Jim>, <PersonExplicitOneWay: Jane>]
37
38 >>> roll.members.add(bob, jim)
39 >>> roll.members.all()
40 [<PersonExplicitOneWay: Bob>, <PersonExplicitOneWay: Jim>]
41
42 >>> jane.groupexplicitoneway_set.all()
43 [<GroupExplicitOneWay: Rock>]
44
45 >>> jane.groupexplicitoneway_set.add(roll)
46 >>> jane.groupexplicitoneway_set.all()
47 [<GroupExplicitOneWay: Rock>, <GroupExplicitOneWay: Roll>]
48
49 >>> jim.groupexplicitoneway_set.all()
50 [<GroupExplicitOneWay: Rock>, <GroupExplicitOneWay: Roll>]
51
52
53 # M2M described on two of the models
54 class PersonExplicitTwoWays(models.Model):
55     name = models.CharField(max_length=128)
56     groups = models.ManyToManyField(PersonExplicitTwoWays, through='MembershipExplicitTwoWays')
57    
58     def __unicode__(self):
59         return self.name
60
61 class GroupExplicitTwoWays(models.Model):
62     name = models.CharField(max_length=128)
63     members = models.ManyToManyField(PersonExplicitTwoWays, through='MembershipExplicitTwoWays')
64    
65     def __unicode__(self):
66         return self.name
67
68 class MembershipExplicitTwoWays(models.Model):
69     person = models.ForeignKey(PersonExplicitTwoWays)
70     group = models.ForeignKey(GroupExplicitTwoWays)
71     date_joined = models.DateTimeField(default=datetime.now)
72
73 >>> bob = PersonExplicitTwoWays(name = 'Bob')
74 >>> bob.save()
75 >>> jim = PersonExplicitTwoWays(name = 'Jim')
76 >>> jim.save()
77 >>> jane = PersonExplicitTwoWays(name = 'Jane')
78 >>> jane.save()
79 >>> rock = GroupExplicitTwoWays(name = 'Rock')
80 >>> rock.save()
81 >>> roll = GroupExplicitTwoWays(name = 'Roll')
82 >>> roll.save()
83
84 >>> rock.members.add(jim, jane)
85 >>> rock.members.all()
86 [<PersonExplicitTwoWays: Jim>, <PersonExplicitTwoWays: Jane>]
87
88 >>> roll.members.add(bob, jim)
89 >>> roll.members.all()
90 [<PersonExplicitTwoWays: Bob>, <PersonExplicitTwoWays: Jim>]
91
92 >>> jane.groups.all()
93 [<GroupExplicitTwoWays: Rock>]
94
95 >>> jane.groups.add(roll)
96 >>> jane.groups.all()
97 [<GroupExplicitTwoWays: Rock>, <GroupExplicitTwoWays: Roll>]
98
99 >>> jim.groups.all()
100 [<GroupExplicitTwoWays: Rock>, <GroupExplicitTwoWays: Roll>]
101
102
103 # M2M implied by model with dual foreign keys
104 class PersonImplicit(models.Model):
105     name = models.CharField(max_length=128)
106    
107     def __unicode__(self):
108         return self.name
109
110 class GroupImplicit(models.Model):
111     name = models.CharField(max_length=128)
112    
113     def __unicode__(self):
114         return self.name
115
116 class MembershipImplicit(models.Model):
117     person = models.ForeignKey(PersonImplicit)
118     group = models.ForeignKey(GroupImplicit)
119     date_joined = models.DateTimeField(default=datetime.now)
120     #Do we need/want some sort of a flag?
121     #Maybe like the following...
122     #class Meta:
123     #    many_to_many = ('person', 'group')
124
125 >>> bob = PersonImplicit(name = 'Bob')
126 >>> bob.save()
127 >>> jim = PersonImplicit(name = 'Jim')
128 >>> jim.save()
129 >>> jane = PersonImplicit(name = 'Jane')
130 >>> jane.save()
131 >>> rock = GroupImplicit(name = 'Rock')
132 >>> rock.save()
133 >>> roll = GroupImplicit(name = 'Roll')
134 >>> roll.save()
135
136 >>> rock.personimplicit_set.add(jim, jane)
137 >>> rock.personimplicit_set.all()
138 [<PersonImplicit: Jim>, <PersonImplicit: Jane>]
139
140 >>> roll.personimplicit_set.add(bob, jim)
141 >>> roll.personimplicit_set.all()
142 [<PersonImplicit: Bob>, <PersonImplicit: Jim>]
143
144 >>> jane.groupimplicit_set.all()
145 [<GroupImplicit: Rock>]
146
147 >>> jane.groupimplicit_set.add(roll)
148 >>> jane.groupimplicit_set.all()
149 [<GroupImplicit: Rock>, <GroupImplicit: Roll>]
150
151 >>> jim.groupimplicit_set.all()
152 [<GroupImplicit: Rock>, <GroupImplicit: Roll>]