当用户单击“提交”按钮时,我正在尝试从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())
答案 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)