Estoy tratando de crear un sitio de comercio electrónico de muestra con Django y estoy tratando de averiguar cómo puedo modelar la relación entre un producto que tiene varios tamaños y cada uno de esos tamaños tiene sus existencias individuales. :
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.slugDado que entiendo bien el problema, debe hacer una variante para combinaciones de product , size y color , así con ForeignKey s para los otros tres modelos. Además, puede crear una UniqueConstraint para evitar ingresar la misma ProductVariant de producto para la tupla de 3 colores/tamaño/producto. El modelo ProductVariant también puede tener un IntegerField con el número de artículos en stock:
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' ) ]