К сожалению, обратная сторона этого решения - ваши изменения с m2m будут выполнены в отдельной транзакции.

я странная проблема, и я надеюсь, что кто-то здесь сможет пролить свет на это.

Я переопределяю метод save () модели, чтобы добавить некоторые значения в поле ManyToMany после запуска super (). Моя проблема в том, что когда я сохраняю в Django admin значения, кажется, добавляются в отношения, но затем снова пусто.

Однако, если я делаю это из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 при сохранении через интерфейс администратора. Это связано с тем, как обрабатывается форма?

Ответы на вопрос(5)

Ваш ответ на вопрос