我遇到了一个奇怪的问题,我希望这里有人能够阐明一些问题。ManyToMany字段在使用Django时未保存admin
运行super()后,我重写了模型的save()方法以将一些值添加到ManyToMany字段。我的问题是,当我在Django admin中保存时,这些值似乎会添加到关系中,但是会再次变为空。
但是,如果我从manage.py shell
这样做,它没有问题。
我已经把两个打印语句放在那里,不管我是通过Django的管理员还是通过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)>]
有谁有什么可能导致这有什么建议?
编辑:在通过管理界面进行保存时,所有对save()中m2m关系的手动更改似乎都被Django丢弃。这与它如何处理表单有关?
我不知道你的问题在哪里,但'self.holidays = self.copy_holidays_from.holidays.all()'看起来好多了,然后清理和迭代。 – DrTyrsa 2011-06-01 11:25:36
谢谢你的提示,我不知道这是可能的。你可以在下面看到我做错了什么。 – 2011-06-01 15:47:26