奇妙な問題が発生しています。ここの誰かが光を当ててくれることを願っています。
super() を実行した後、モデルの save() メソッドをオーバーライドして、ManyToMany フィールドにいくつかの値を追加しています。私の問題は、Django admin に保存すると、値が関係に追加されたように見えますが、再び空になることです。
しかし、私がそれを行うと、manage.py shell
問題なく動作します。
そこに2つのprintステートメントを入れました.Django管理者またはシェルのどちらで実行しているかに関係なく、まったく同じ出力が生成されます.
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 によって破棄されるようです。これは、フォームの処理方法に関連していますか?