Django, adding item to manytomany within custom save method not working in admin

StackOverflow https://stackoverflow.com/questions/21319313

  •  01-10-2022
  •  | 
  •  

Question

I am sure this is something stupid that I cannot see, but here is what I have

def save(self, *args, **kwargs):
    print self.sites.all()
    super(Article, self).save(*args, **kwargs)
    self.sites.add(Site.objects.get(pk=1))
    print self.sites.all()

Which prints

[<Site: site2.co.nz>, <Site: site3.co.nz>]
[<Site: site2.co.nz>, <Site: site3.co.nz>, <Site: site1.co.nz>]

but site1.co.nz is not being persisted in the m2m relationship.

Était-ce utile?

La solution

Looks like django admin saves the m2m separately which clears the m2m data in my custom save method.

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_related

class MyModelAdmin(admmin.ModelAdmin):
    def save_related(self, request, form, *args, **kwargs):
        super(ArticleAdmin, self).save_related(request, form, *args, **kwargs).
        obj = form.instance
        obj.sites.add(Site.objects.get(id=1))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top