我想在管理面板中为每个项目更改颜色选项和尺寸选项的“数组”

时间:2019-06-27 16:55:05

标签: python django django-models bootstrap-4

标题和代码。我正在一个电子商务网站上,每个项目(颜色/大小)将有多个选项。在代码中,您可以看到价格(price(1-3)),其想法是为管理员创建一个按钮或选项,以添加其他尺寸,因此价格无需硬编码sizename(1-4),colorName( 1-4)。我希望您能理解我要做什么,我昨天才开始学习python以及所有这些bootstrap和django的东西。顺便说一句,如果您知道处理所有这些问题的简便方法,请告诉我,我对如何制作购物车一无所知。

我刚刚开始

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(decimal_places=2, max_digits=20)
    stock = models.IntegerField()
    image_url = models.CharField(max_length=2083)
    category = models.CharField(choices=MY_CHOICES, max_length=25, default='Default')
    multSizes = models.BooleanField(default=False)

    numberSizes = models.IntegerField(default=1)
    price1 = models.DecimalField(decimal_places=2, max_digits=20, default=0)
    price2 = models.DecimalField(decimal_places=2, max_digits=20, default=0)
    price3 = models.DecimalField(decimal_places=2, max_digits=20, default=0)
    sizename1 = models.CharField(max_length=255, default='N/A')
    sizename2 = models.CharField(max_length=255, default='N/A')
    sizename3 = models.CharField(max_length=255, default='N/A')
    sizename4 = models.CharField(max_length=255, default='N/A')
    numberColors = models.IntegerField(default=1)
    colorName = models.CharField(max_length=255, default='N/A')
    colorName1 = models.CharField(max_length=255, default='N/A')
    colorName2 = models.CharField(max_length=255, default='N/A')
    colorName3 = models.CharField(max_length=255, default='N/A')
    colorName4 = models.CharField(max_length=255, default='N/A')

我希望能够通过django管理面板更改不同尺寸/价格和颜色的数量。我不想像现在那样对字段进行硬编码。

1 个答案:

答案 0 :(得分:0)

如果Product模型仅具有一个“颜色”和“大小”字段,则可以创建具有不同属性的模型多个实例。

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(decimal_places=2, max_digits=20)
    stock = models.IntegerField()
    image_url = models.CharField(max_length=2083)
    category = models.CharField(choices=MY_CHOICES, max_length=25, default='Default')
    sizename = models.CharField(max_length=255, default='N/A')
    colorName = models.CharField(max_length=255, default='N/A')
>>> p1 = Product(name="shirt", price=10, sizename="M", colorname="red")
>>> p2 = Product(name="pants", price=20, sizename="M", colorname="yellow")

但是,我认为您遇到的问题是对于具有一组某些属性的产品-namepricestock,{{1} }和image_url-有多种尺寸和颜色。正确吗?

如果是这样,您仍然可以创建共享这些属性的多个实例:

category

但是,在数据库设计中,这不被视为“常规形式”。 See: Second Normal Form (Wikipedia).

更好的设计可能是将这些属性拉到一个单独的表中,即第二个Django模型,该表使用外键引用第一个模型。像这样:

>>> p1 = Product(name="shirt", price=10, sizename="M", colorname="red")
>>> p2 = Product(name="shirt", price=10, sizename="L", colorname="yellow")

有关更多信息,请参见many-to-one relationships上的Django文档。