#31981: many_to_many add() does not trigger post_save signal for the through 
class
-----------------------------------------+------------------------
               Reporter:  Kurt Wheeler   |          Owner:  nobody
                   Type:  Uncategorized  |         Status:  new
              Component:  Uncategorized  |        Version:  3.1
               Severity:  Normal         |       Keywords:
           Triage Stage:  Unreviewed     |      Has patch:  0
    Needs documentation:  0              |    Needs tests:  0
Patch needs improvement:  0              |  Easy pickings:  0
                  UI/UX:  0              |
-----------------------------------------+------------------------
 I have a many-to-many relationship on my organization model:
 https://github.com/AlexsLemonade/resources-
 portal/blob/dev/api/resources_portal/models/organization.py#L50. As you
 can see, I specify `through="OrganizationUserAssociation"`, and that class
 is defined here: https://github.com/AlexsLemonade/resources-
 
portal/blob/dev/api/resources_portal/models/associations/organization_user_association.py

 In a branch I am working on, I am adding a post-save signal to
 OrganizationUserAssociation. What I have found is that this isn't called
 when `organization.members.add(user)` is called.

 I can't actually tell if this is a bug or just poorly documented. The only
 documentation I can find for the add() method is here:
 https://docs.djangoproject.com/en/3.1/topics/db/examples/many_to_many/ and
 it only shows the method being used for a single object. I think the
 post_save signal isn't being triggered because add() is doing a bulk
 update instead of creating the through class and saving that? Does add()
 handle multiple objects, is that why bulk update is being used? I can't
 actually find any documentation that indicates either way.

 However, it makes sense to me that if add() is called with a single
 object, and there is a `through` class for the many-to-many field, then
 the `through` class should be used to create the relationship.

 It seems like now I have to go through my code and find everywhere I
 called add() and do it the less convenient way. (The unfortunate thing is,
 that add() isn't that much more convenient than creating the association,
 so I wish I had just been warned so I could avoid it altogether.)

-- 
Ticket URL: <https://code.djangoproject.com/ticket/31981>
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/054.43a464511f65a754ce4cb99fbb0a7309%40djangoproject.com.

Reply via email to