#22296: Documentation clarification: m2m_changed pk_set inconsistent between
post_add and post_remove
-------------------------------+--------------------
     Reporter:  anentropic     |      Owner:  nobody
         Type:  Uncategorized  |     Status:  new
    Component:  Uncategorized  |    Version:  1.5
     Severity:  Normal         |   Keywords:
 Triage Stage:  Unreviewed     |  Has patch:  0
Easy pickings:  0              |      UI/UX:  0
-------------------------------+--------------------
 the docs say:

 "`pk_set`: For the pre_add, post_add, pre_remove and post_remove actions,
 this is a set of primary key values that have been added to or removed
 from the relation."

 What I found is that for `action=='post_add'`:
 - first time `add(x)` -> `set([x])`
 - next time (same `x`) `add(x)` -> `set([])`

 but for `action=='post_remove'`:
 - first time `remove(x)` -> `set([x])`
 - next time (same `x`) `remove(x)` -> `set([x])`

 I feel like they should be consistent. Either way is fine but the
 behaviour of `post_add` seems more useful to me (can avoid unnecessary
 action in your signal receiver)... but it should be documented that you
 get empty set if nothing needed adding.

 I've only tried on 1.5 so far but looking at source I don't see any new
 code to change this behaviour
 
https://github.com/django/django/blob/master/django/db/models/fields/related.py#L1032

 Whereas it looks like the add method has code to deliberately exclude
 already added items
 
https://github.com/django/django/blob/master/django/db/models/fields/related.py#L1008

 I'm happy to make a patch if it's felt this is useful?

-- 
Ticket URL: <https://code.djangoproject.com/ticket/22296>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/053.e4e350121d004ded4e031c47656f94c6%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to