Django admin save()无法从ManyToManyField获取数据

时间:2019-04-18 23:44:08

标签: django

当用户单击“提交”按钮时,我正在尝试从Django管理中的affiliate_networks获取选定的对象。

当我从affiliate_networks中选择一个并提交时,控制台将打印affiliate_networks的空白,然后返回页面并正确存储所选对象。因此,我再次提交它,然后控制台将打印选定的对象。 save()仅接收已经存储的对象,而不接收我在保存之前选择的对象。

有没有办法让我save()注意到affiliate_networks有任何对象被选中?

class Store(models.Model):
    ...
    affiliate_networks = models.ManyToManyField(AffiliateNetwork, blank=True)

    def save(self, *args, **kwargs):
        print(self.affiliate_networks.all())

1 个答案:

答案 0 :(得分:1)

您无法在save()中做到这一点-正如您所发现的那样,Django管理员直到之后才保存ManyToMany对象。您需要在ModelAdmin的save_related方法中执行此操作。参见https://timonweb.com/posts/many-to-many-field-save-method-and-the-django-admin/

在admin.py中:

...

class StoreAdmin(admin.ModelAdmin):

    def save_related(self, request, form, formsets, change):
        super(StoreAdmin, self).save_related(request, form, formsets, change)
        print(form.instance.affiliate_networks.all())

...

admin.site.register(Store, StoreAdmin)