Модель Django Products для сайта электронной коммерции
Я пытаюсь создать пример сайта электронной коммерции на Django и пытаюсь понять, как я могу смоделировать отношения между продуктом, имеющим несколько размеров и каждый из этих размеров имеет свои индивидуальные запасы. вот мои разнообразные модели продуктов/товаров:
from django.db import models
from colorfield.fields import ColorField
# Create your models here.
class Color(models.Model):
Color = models.CharField(max_length=120,null=True,blank=True)
value = ColorField(default='#FF0000')
def __str__(self):
return self.Color
class Size(models.Model):
Size = models.CharField(max_length=120,null=True,blank=True)
def __str__(self):
return self.Size
class Product(models.Model):
title = models.CharField(max_length=120,null=True,blank=True)
def __str__(self):
return self.title
class ProductVaraiant(models.Model):
product =models.ForeignKey(Product,on_delete=models.CASCADE,null=True,blank=True)
slug = models.CharField(max_length=120,null=True,blank=True)
Color = models.ForeignKey(Color,on_delete=models.CASCADE,null=True,blank=True,)
Size = models.ManyToManyField(Size)
def __str__(self):
return self.slug
Если я правильно понимаю проблему, то вам следует сделать вариант для комбинаций product
, size
и color
, то есть с ForeignKey
для трех других моделей. Кроме того, вы можете сделать UniqueConstraint
для предотвращения ввода одного и того же ProductVariant
для 3-кортежа цвет/размер/продукт. Тогда модель ProductVariant
может также иметь IntegerField
с количеством товаров на складе:
class ProductVaraiant(models.Model):
product = models.ForeignKey(Product,on_delete=models.CASCADE)
color = models.ForeignKey(Color,on_delete=models.CASCADE)
size = models.ForeignKey(Size, on_delete=models.CASCADE)
amount_in_stock = models.IntegerField()
class Meta:
constraints = [
models.UniqueConstraint(
fields=['product', 'color', 'size'],
name='unique_prod_color_size_combo'
)
]