首页 > 解决方案 > 当在多对多模型中创建新的目标实例时,更新源模型的每个实例的推荐方法是什么?

问题描述

我有一个网站,我想在其中显示一个基本的 html 表格,如下所示:

Product_Name | Attribute_1 | Attribute_2
----------------------------------------- 
Soap         | True        | True 
Shampoo      | False       | True

所以我创建了类ProductAttribute具有多对多关系。

模型.py

class Product(models.Model):
    name = models.CharField(max_length=10)
    attributes = models.ManyToManyField(on_delete='CASCADE')

class Attribute(models.Model):
    name = models.CharField(max_length=1, default='N')

所以我有两个 Attribute 实例——Attribute_1 和 Attribute_2。

当我创建一个新属性 (Attribute_3) 时,有没有办法可以通过指向新属性的链接更新我的所有产品实例的关系?

我知道 Django 为 m2m 关系创建了一个直通表。根据文档,我知道我可以执行以下操作:

for prod_obj in Product.objects.all(): prod_obj.add(new_attribute_object)

但是,如何确保每次创建属性对象时自动/一致地发生这种情况?

标签: pythondjangomanytomanyfield

解决方案


您应该为您的模型编写一个自定义save方法Attributea) 检查Attribute对象是否是第一次创建;b)如果是这样,请将其添加Attribute到数据库中的每个Product。有关编写自定义save方法的更多信息,请参阅这篇文章


推荐阅读