许多更新,Django信号

2021-12-08 05:18:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这些模型(简化):

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中,我试图手动更改一堆选定ProductsCategory(我有一个自定义函数)。但这里我看到了两个问题:
1) 必须更新Brand->Category中的M2M关系,如果没有Brand与此Category
2) 必须更新Category->Shop中的M2M关系,如果Shop中没有选择此Category

如何以最好的方式做到这一点?我知道这可能是某种Django信号的用法,特别是m2m_changed,但我无法理解谁是信号的发射器,谁是接收器,以及如何在一个表中更改后更新多个表。你知道吗