Opened 7 years ago
Closed 7 years ago
#29256 closed Bug (invalid)
Need a save() call after assigning a many to many relation
Reported by: | Victor Porton | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.11 |
Severity: | Normal | Keywords: | |
Cc: | Victor Porton | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
As http://guido.vonrudorff.de/django-manytomany-relationship-and-unsaved-objects/ teaches (and our tests show too), save()
should be called twice when using m2m fields:
parts = BarClass.objects.filter(label__in=['eggs', 'bacon', 'spam']) foo = FooClass(label='lunch') foo.save() # do not forget this line foo.child = parts foo.save()
It looks silly and counter-intuitive to call save()
twice. Is this a bug?
At least the docs should say this vividly. So at very least we have a bug in documentation for not addressing this issue.
The model code used:
class BarClass(models.Model): label = models.CharField() class FooClass(models.Model): label = models.CharField() child = models.ManyToManyField(BarClass)
Change History (2)
comment:1 by , 7 years ago
Cc: | added |
---|
comment:2 by , 7 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
Summary: | Needs two save() calls → Need a save() call after assigning a many to many relation |
Note:
See TracTickets
for help on using tickets.
The blog post is incorrect. A second save isn't needed. Also, that code won't work in Django 2.0 and later which removed support for direct assignment to many to many relations.
The blog post should use
foo.child.set(parts)
as described in the documentation.In the future, please use our support channels to ask "is it a bug?" questions.