У меня возникла странная проблема, и я надеюсь, что кто-то здесь сможет пролить свет.
Я переопределяю метод save() модели, чтобы добавить некоторые значения в поле ManyToMany после запуска super(). Моя проблема в том, что когда я сохраняю в администраторе Django, значения, кажется, добавляются к отношениям, но затем снова пусты.
Однако, если я делаю это с manage.py shell
, это работает без проблем.
Я поместил туда два оператора печати, и они выдают один и тот же результат независимо от того, запускаю ли я его через администратора 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)>]
Есть ли у кого-нибудь предложения о том, что может быть причиной этого?
Редактировать: все ручные изменения отношения m2m в save(), по-видимому, отбрасываются Django при сохранении через интерфейс администратора. Это связано с тем, как он обрабатывает форму?
self.holidays = self.copy_holidays_from.holidays.all()
выглядит намного лучше, чем очистка и итерация. - person DrTyrsa   schedule 01.06.2011