Модель 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'
            )
        ]
Вернуться на верх