Django中级多对多模型

yhuiod9q  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(97)

我想知道我是否可以为多对多字段创建中间模型,而不指定related_name,而是将ManyToManyField放在两个Model上。
我看了一些Django ORM的教程,老师明确地说我们不能在两个模型上使用ManyToManyField(虽然我认为如果Django创建自己的表,我不确定如果我们指定自定义中间模型,这是真的)。
这就是代码:

class Category(models.Model):
    products = models.ManyToManyField("Product", through="CategoryProduct")
    name = models.CharField(max_length=255, unique=True)

class CategoryProduct(models.Model):
    category = models.ForeignKey("Category", on_delete=models.CASCADE)
    product = models.ForeignKey("Product", on_delete=models.CASCADE)

    class Meta:
        unique_together = ("category", "product",)

class Product(models.Model):
    categories = models.ManyToManyField("Category", through="CategoryProduct")
    attribute_value = models.ManyToManyField("AttributeValue", related_name="products")
    name = models.CharField(max_length=255, unique=True)

字符串
我用虚拟数据测试了它,这段代码对我很有效:

p = Product.objects.get(id=1)
c = Category.objects.get(id=1)

p.categories.add(1, 2, 3)
c.products.add(1, 2, 3)

重要问题不是关于Product model上额外的M2M字段到attribute_value

dxxyhpgq

dxxyhpgq1#

虽然through表通常用于在CategoryProduct模型上存储额外的数据时。

相关问题