Сигнал Django post_save, по-видимому, срабатывает только во 2-й сохранения или после - PullRequest
1 голос
/ 04 мая 2011

Таким образом, я использую триггерную функцию сигнала на post_save для создания экземпляров другой модели при сохранении первой:

Модель, запускающая сигнал:

class Product(models.Model):
    # ...
    colors = models.ManyToManyField(Color)
    sizes = models.ManyToManyField(Size)

И функция:

def create_skus(instance, **kwargs):
    for color in instance.colors.select_related():
        for size in instance.colors.select_related():
            SKU.objects.get_or_create(product=instance, color=color, size=size)

Моя проблема в том, что create_skus должен вызываться на post_save каждый раз, но кажется, что он работает только во 2-м сохранении или после, в результате чего пользователям приходится сохранять продукт дважды,Каково происхождение этого?

РЕДАКТИРОВАТЬ : Я думаю, что это как-то связано с тем, как складываются эти отношения M2M (т.е. instance.colors.add(<Color object>), но я не уверен, и если вызнаю обходной путь, я буду любить тебя вечно.

1 Ответ

2 голосов
/ 05 мая 2011

Сигнал отправляется при сохранении экземпляра Product, а не при сохранении экземпляров Color и Size.Поэтому с первой попытки экземпляр Product в функции post_save () не будет (пока) иметь экземпляры Color и Size, поскольку они не сохраняются с помощью метода save () модели Product.

Проверьте эти двассылки:

...