У меня есть эти модели (упрощенно):
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 таблице.