django如何在我的模型中添加自己模型的字段列表?

时间:2018-08-02 17:16:44

标签: python sql django models

我正在制作模型,在哪里代表产品 但是我想添加一个带有Supplemental_products的字段,以便将其作为产品列表。

例如,

id: 1 

product: dr pepper

complementary_products [chips, hotdogs]

id: 2

product: laptop

complementary_products" [mouse, usb_cable]

id: 3

product: chips

complementary_products [dr pepper, hotdogs]

我尝试了很多,但是当我开始在管理页面中添加产品时,会不断追加,如果我添加了3个项目,最后一个将具有所有前一个=(

class ProductModel(models.Model):
    product_name = models.CharField(max_length=200)
    complementary_products = models.ManyToManyField("self", blank=True)

如果我使用ForeingKey,则只能设置为一项=(

complementary_products = models.ForeignKey("self", on_delete=models.CASCADE, default=None, blank=True)
关于如何实现此目标的任何建议?谢谢大家

enter image description here

当我尝试添加第三个产品时,该字段已经具有2个预览 我确实获得了+号按钮来继续添加更多产品,但是我没有要删除的按钮,是因为Django的管理形式可能出了什么问题?

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,听起来好像您需要一张遍历表来进行许多操作。 docs在解释它方面做得很好,因此我在这里不再赘述。

示例

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):
        return self.name

class CompProduct(models.Model):
    name = models.CharField(max_length=128)
    products = models.ManyToManyField(Product, through='ProductsBelong')

    def __str__(self):
        return self.name

class ProductsBelong(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    comp = models.ForeignKey(CompProduct, on_delete=models.CASCADE)
    date_added = models.DateField()

答案 1 :(得分:0)

class ProductModel(models.Model):
    product_name = models.CharField(max_length=200, null=True)
    complementary_products = models.ManyToManyField("self", blank=True)  # , related_name="products")

如果设置related_name =参数,则可以告诉Django要在后台创建的表的名称。加上我不是按住Control键并单击“ complementary_products”列表