Если у вас есть только одно поле «цвет» и «размер» для модели 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")
Однако я думаю, что проблема, с которой вы столкнулись, заключается в том, что для продукта с одним набором некоторых свойств - name
, price
, stock
, image_url
и category
- Есть несколько размеров и цветов. Это правильно?
Если это так, вы все равно можете создать несколько экземпляров с общими свойствами:
>>> p1 = Product(name="shirt", price=10, sizename="M", colorname="red")
>>> p2 = Product(name="shirt", price=10, sizename="L", colorname="yellow")
Однако при проектировании базы данных это не считается «нормальной формой». См .: Вторая нормальная форма (Википедия).
Лучшим дизайном может быть включение этих атрибутов в отдельную таблицу, т. Е. Вторую модель 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')
class ProductVariant(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
sizename = models.CharField(max_length=255, default='N/A')
colorName = models.CharField(max_length=255, default='N/A')
Для получения дополнительной информации см. Документы Django по отношениям "многие к одному" .