我遇到了一个奇怪的问题,我希望这里的某个人能够解释一下。
我正在覆盖模型的 save() 方法,以便在运行 super() 后向 ManyToMany-field 添加一些值。我的问题是,当我在 Django admin 中保存时,这些值似乎被添加到关系中,但随后又为空。
但是,如果我这样做,manage.py shell
它就没有问题。
我在那里放了两个打印语句,无论我是通过 Django admin 还是通过 shell 运行它,它们都会产生完全相同的输出。
class Store(models.Model):
holidays = models.ManyToManyField(StoreHoliday, blank=True)
copy_holidays_from = models.ForeignKey('Store', blank=True, null=True)
def save(self):
print '==== BEFORE SAVE:', self.holidays.all()
super(Store, self).save()
self.copy_holidays()
print '==== AFTER SAVE:', self.holidays.all()
def copy_holidays(self):
if self.pk and self.copy_holidays_from:
self.holidays.clear()
for h in self.copy_holidays_from.holidays.all():
self.holidays.add( h )
这是print
语句的输出:
==== BEFORE SAVE: []
==== AFTER SAVE: [<StoreHoliday: 10 Mar 2010, Chuck Norris birthday (Closed)>]
有没有人对可能导致这种情况的原因有任何建议?
编辑:通过管理界面保存时,Django 似乎丢弃了 save() 中对 m2m 关系的所有手动更改。这与它如何处理表单有关吗?