我正在创建商店后端。我有产品型号,每个产品都有许多不同尺寸的型号。但是有一个问题:如何管理产品每种尺寸的数量?我只想控制每种产品的每种尺寸有多少。我的模特:
class Size(models.Model):
class Meta:
verbose_name = "Размер"
verbose_name_plural = "Размеры"
size = models.CharField(max_length=255, verbose_name="Размер")
def __str__(self):
return self.size
class Image(models.Model):
class Meta:
verbose_name = "Фотография"
verbose_name_plural = "Фотографии"
image = models.ImageField(verbose_name="Фотография", upload_to='product_images/')
def __str__(self):
return self.image.name
class Product(models.Model):
class Meta:
verbose_name = "Товар"
verbose_name_plural = "Товары"
title = models.CharField(max_length=255, verbose_name='Название')
images = models.ManyToManyField(Image, verbose_name="Фотографии")
cost = models.IntegerField(verbose_name='Цена')
sizes = models.ManyToManyField(Size, verbose_name='Размеры')
description = models.TextField(max_length=2000, verbose_name='Описание')
structure = models.CharField(max_length=50, verbose_name="Материал")
sizes_image = models.ImageField(verbose_name="Сетка размеров", upload_to='product_sizes/')
答案 0 :(得分:1)
您可以通过指定through=…
parameter [Django-doc]将其存储在Product
和Size
之间的中间模型中。例如:
class Size(models.Model):
size = models.CharField(max_length=255)
class Product(models.Model):
sizes = models.ManyToManyField(Size, through='ProductSize')
class ProductSize(models.Model):
size = models.ForeignKey(Size, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
count = models.IntegerField(default=1)
实质上,ManyToManyField
只是一个中间模型,其中涉及的模型有两个ForeignKey
。它还添加了一些额外的功能来有效地使用ORM进行查询,仅此而已。
例如,您可以在此处查询至少具有一个Product
的{{1}}的大小:
count
有关更多信息,请see the documentation on the through=…
parameter。
在管理员中,您可以按照this answer中的指定,将此模型添加为myproduct.sizes.filter(productsize__count__gt=0)
:
InlineModelAdmin