Обновление «многие ко многим», сигналы Django - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть эти модели (упрощенно):

class Product(TimeStampedModel):
    product_id = models.AutoField(primary_key=True, )
    shop = models.ForeignKey('Shop', related_name='products', to_field='shop_name', on_delete=models.CASCADE)
    category = models.ForeignKey('Category', related_name='products', to_field='category_name', on_delete=models.SET_NULL)
    brand = models.ForeignKey('Brand', related_name='products', to_field='brand_name', on_delete=models.CASCADE)

class Brand(models.Model):
    brand_name = models.CharField(max_length=50)
    shops = models.ManyToManyField('Shop', related_name='shops')
    categories = models.ManyToManyField('Category', related_name='categories')

class Category(models.Model):
    category_name = models.CharField(max_length=128)
    shops = models.ManyToManyField('Shop')

class Shop(models.Model):
    shop_name = models.CharField(max_length=30)

В admin Я пытаюсь вручную изменить Category для группы выбранных Products (у меня есть специальная функция для этого). Но здесь я вижу 2 проблемы:
1) Должно быть обновлено отношение M2M в Brand->Category, если не было Brand с этим Category.
2) Необходимо обновить отношение M2M в Category->Shop, если не было выбрано Category в Shop.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...