@@ -73,7 +73,13 @@ def m2m_changed_test(signal, sender, **kwargs):
73
73
>>> c1.default_parts.add(p1, p2, p3)
74
74
m2m_changed signal
75
75
instance: VW
76
- action: add
76
+ action: pre_add
77
+ reverse: False
78
+ model: <class 'modeltests.m2m_signals.models.Part'>
79
+ objects: [<Part: Doors>, <Part: Engine>, <Part: Wheelset>]
80
+ m2m_changed signal
81
+ instance: VW
82
+ action: post_add
77
83
reverse: False
78
84
model: <class 'modeltests.m2m_signals.models.Part'>
79
85
objects: [<Part: Doors>, <Part: Engine>, <Part: Wheelset>]
@@ -82,7 +88,13 @@ def m2m_changed_test(signal, sender, **kwargs):
82
88
>>> p2.car_set.add(c2, c3)
83
89
m2m_changed signal
84
90
instance: Doors
85
- action: add
91
+ action: pre_add
92
+ reverse: True
93
+ model: <class 'modeltests.m2m_signals.models.Car'>
94
+ objects: [<Car: BMW>, <Car: Toyota>]
95
+ m2m_changed signal
96
+ instance: Doors
97
+ action: post_add
86
98
reverse: True
87
99
model: <class 'modeltests.m2m_signals.models.Car'>
88
100
objects: [<Car: BMW>, <Car: Toyota>]
@@ -91,7 +103,13 @@ def m2m_changed_test(signal, sender, **kwargs):
91
103
>>> c1.default_parts.remove(p3, p4)
92
104
m2m_changed signal
93
105
instance: VW
94
- action: remove
106
+ action: pre_remove
107
+ reverse: False
108
+ model: <class 'modeltests.m2m_signals.models.Part'>
109
+ objects: [<Part: Airbag>, <Part: Engine>]
110
+ m2m_changed signal
111
+ instance: VW
112
+ action: post_remove
95
113
reverse: False
96
114
model: <class 'modeltests.m2m_signals.models.Part'>
97
115
objects: [<Part: Airbag>, <Part: Engine>]
@@ -100,7 +118,13 @@ def m2m_changed_test(signal, sender, **kwargs):
100
118
>>> c1.optional_parts.add(p4,p5)
101
119
m2m_changed signal
102
120
instance: VW
103
- action: add
121
+ action: pre_add
122
+ reverse: False
123
+ model: <class 'modeltests.m2m_signals.models.Part'>
124
+ objects: [<Part: Airbag>, <Part: Sunroof>]
125
+ m2m_changed signal
126
+ instance: VW
127
+ action: post_add
104
128
reverse: False
105
129
model: <class 'modeltests.m2m_signals.models.Part'>
106
130
objects: [<Part: Airbag>, <Part: Sunroof>]
@@ -109,7 +133,13 @@ def m2m_changed_test(signal, sender, **kwargs):
109
133
>>> p4.cars_optional.add(c1, c2, c3)
110
134
m2m_changed signal
111
135
instance: Airbag
112
- action: add
136
+ action: pre_add
137
+ reverse: True
138
+ model: <class 'modeltests.m2m_signals.models.Car'>
139
+ objects: [<Car: BMW>, <Car: Toyota>]
140
+ m2m_changed signal
141
+ instance: Airbag
142
+ action: post_add
113
143
reverse: True
114
144
model: <class 'modeltests.m2m_signals.models.Car'>
115
145
objects: [<Car: BMW>, <Car: Toyota>]
@@ -118,7 +148,13 @@ def m2m_changed_test(signal, sender, **kwargs):
118
148
>>> p4.cars_optional.remove(c1)
119
149
m2m_changed signal
120
150
instance: Airbag
121
- action: remove
151
+ action: pre_remove
152
+ reverse: True
153
+ model: <class 'modeltests.m2m_signals.models.Car'>
154
+ objects: [<Car: VW>]
155
+ m2m_changed signal
156
+ instance: Airbag
157
+ action: post_remove
122
158
reverse: True
123
159
model: <class 'modeltests.m2m_signals.models.Car'>
124
160
objects: [<Car: VW>]
@@ -127,23 +163,38 @@ def m2m_changed_test(signal, sender, **kwargs):
127
163
>>> c1.default_parts.clear()
128
164
m2m_changed signal
129
165
instance: VW
130
- action: clear
166
+ action: pre_clear
167
+ reverse: False
168
+ model: <class 'modeltests.m2m_signals.models.Part'>
169
+ m2m_changed signal
170
+ instance: VW
171
+ action: post_clear
131
172
reverse: False
132
173
model: <class 'modeltests.m2m_signals.models.Part'>
133
174
134
175
# take all the doors off of cars
135
176
>>> p2.car_set.clear()
136
177
m2m_changed signal
137
178
instance: Doors
138
- action: clear
179
+ action: pre_clear
180
+ reverse: True
181
+ model: <class 'modeltests.m2m_signals.models.Car'>
182
+ m2m_changed signal
183
+ instance: Doors
184
+ action: post_clear
139
185
reverse: True
140
186
model: <class 'modeltests.m2m_signals.models.Car'>
141
187
142
188
# take all the airbags off of cars (clear reverse relation with custom related_name)
143
189
>>> p4.cars_optional.clear()
144
190
m2m_changed signal
145
191
instance: Airbag
146
- action: clear
192
+ action: pre_clear
193
+ reverse: True
194
+ model: <class 'modeltests.m2m_signals.models.Car'>
195
+ m2m_changed signal
196
+ instance: Airbag
197
+ action: post_clear
147
198
reverse: True
148
199
model: <class 'modeltests.m2m_signals.models.Car'>
149
200
@@ -152,7 +203,13 @@ def m2m_changed_test(signal, sender, **kwargs):
152
203
>>> c1.default_parts.create(name='Windows')
153
204
m2m_changed signal
154
205
instance: VW
155
- action: add
206
+ action: pre_add
207
+ reverse: False
208
+ model: <class 'modeltests.m2m_signals.models.Part'>
209
+ objects: [<Part: Windows>]
210
+ m2m_changed signal
211
+ instance: VW
212
+ action: post_add
156
213
reverse: False
157
214
model: <class 'modeltests.m2m_signals.models.Part'>
158
215
objects: [<Part: Windows>]
@@ -162,12 +219,23 @@ def m2m_changed_test(signal, sender, **kwargs):
162
219
>>> c1.default_parts = [p1,p2,p3]
163
220
m2m_changed signal
164
221
instance: VW
165
- action: clear
222
+ action: pre_clear
166
223
reverse: False
167
224
model: <class 'modeltests.m2m_signals.models.Part'>
168
225
m2m_changed signal
169
226
instance: VW
170
- action: add
227
+ action: post_clear
228
+ reverse: False
229
+ model: <class 'modeltests.m2m_signals.models.Part'>
230
+ m2m_changed signal
231
+ instance: VW
232
+ action: pre_add
233
+ reverse: False
234
+ model: <class 'modeltests.m2m_signals.models.Part'>
235
+ objects: [<Part: Doors>, <Part: Engine>, <Part: Wheelset>]
236
+ m2m_changed signal
237
+ instance: VW
238
+ action: post_add
171
239
reverse: False
172
240
model: <class 'modeltests.m2m_signals.models.Part'>
173
241
objects: [<Part: Doors>, <Part: Engine>, <Part: Wheelset>]
@@ -177,20 +245,37 @@ def m2m_changed_test(signal, sender, **kwargs):
177
245
>>> c4.default_parts = [p2]
178
246
m2m_changed signal
179
247
instance: Bugatti
180
- action: clear
248
+ action: pre_clear
249
+ reverse: False
250
+ model: <class 'modeltests.m2m_signals.models.Part'>
251
+ m2m_changed signal
252
+ instance: Bugatti
253
+ action: post_clear
254
+ reverse: False
255
+ model: <class 'modeltests.m2m_signals.models.Part'>
256
+ m2m_changed signal
257
+ instance: Bugatti
258
+ action: pre_add
181
259
reverse: False
182
260
model: <class 'modeltests.m2m_signals.models.Part'>
261
+ objects: [<Part: Doors>]
183
262
m2m_changed signal
184
263
instance: Bugatti
185
- action: add
264
+ action: post_add
186
265
reverse: False
187
266
model: <class 'modeltests.m2m_signals.models.Part'>
188
267
objects: [<Part: Doors>]
189
268
190
269
>>> p3.car_set.add(c4)
191
270
m2m_changed signal
192
271
instance: Engine
193
- action: add
272
+ action: pre_add
273
+ reverse: True
274
+ model: <class 'modeltests.m2m_signals.models.Car'>
275
+ objects: [<Car: Bugatti>]
276
+ m2m_changed signal
277
+ instance: Engine
278
+ action: post_add
194
279
reverse: True
195
280
model: <class 'modeltests.m2m_signals.models.Car'>
196
281
objects: [<Car: Bugatti>]
@@ -207,38 +292,71 @@ def m2m_changed_test(signal, sender, **kwargs):
207
292
>>> p1.friends = [p2, p3]
208
293
m2m_changed signal
209
294
instance: Alice
210
- action: clear
295
+ action: pre_clear
296
+ reverse: False
297
+ model: <class 'modeltests.m2m_signals.models.Person'>
298
+ m2m_changed signal
299
+ instance: Alice
300
+ action: post_clear
301
+ reverse: False
302
+ model: <class 'modeltests.m2m_signals.models.Person'>
303
+ m2m_changed signal
304
+ instance: Alice
305
+ action: pre_add
211
306
reverse: False
212
307
model: <class 'modeltests.m2m_signals.models.Person'>
308
+ objects: [<Person: Bob>, <Person: Chuck>]
213
309
m2m_changed signal
214
310
instance: Alice
215
- action: add
311
+ action: post_add
216
312
reverse: False
217
313
model: <class 'modeltests.m2m_signals.models.Person'>
218
314
objects: [<Person: Bob>, <Person: Chuck>]
219
315
220
316
>>> p1.fans = [p4]
221
317
m2m_changed signal
222
318
instance: Alice
223
- action: clear
319
+ action: pre_clear
320
+ reverse: False
321
+ model: <class 'modeltests.m2m_signals.models.Person'>
322
+ m2m_changed signal
323
+ instance: Alice
324
+ action: post_clear
325
+ reverse: False
326
+ model: <class 'modeltests.m2m_signals.models.Person'>
327
+ m2m_changed signal
328
+ instance: Alice
329
+ action: pre_add
224
330
reverse: False
225
331
model: <class 'modeltests.m2m_signals.models.Person'>
332
+ objects: [<Person: Daisy>]
226
333
m2m_changed signal
227
334
instance: Alice
228
- action: add
335
+ action: post_add
229
336
reverse: False
230
337
model: <class 'modeltests.m2m_signals.models.Person'>
231
338
objects: [<Person: Daisy>]
232
339
233
340
>>> p3.idols = [p1,p2]
234
341
m2m_changed signal
235
342
instance: Chuck
236
- action: clear
343
+ action: pre_clear
344
+ reverse: True
345
+ model: <class 'modeltests.m2m_signals.models.Person'>
346
+ m2m_changed signal
347
+ instance: Chuck
348
+ action: post_clear
349
+ reverse: True
350
+ model: <class 'modeltests.m2m_signals.models.Person'>
351
+ m2m_changed signal
352
+ instance: Chuck
353
+ action: pre_add
237
354
reverse: True
238
355
model: <class 'modeltests.m2m_signals.models.Person'>
356
+ objects: [<Person: Alice>, <Person: Bob>]
239
357
m2m_changed signal
240
358
instance: Chuck
241
- action: add
359
+ action: post_add
242
360
reverse: True
243
361
model: <class 'modeltests.m2m_signals.models.Person'>
244
362
objects: [<Person: Alice>, <Person: Bob>]
0 commit comments