我遇到了一個奇怪的問題,我希望這裏有人能夠闡明一些問題。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