Вы можете сохранить это в промежуточной модели между Product
и Size
, указав through=…
параметр [Django -doc] . Например:
class Size(models.Model):
size = models.CharField(max_length=255)
class Product(models.Model):
sizes = models.ManyToManyField(Size, <b>through='ProductSize'</b>)
class ProductSize(models.Model):
size = models.ForeignKey(Size, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
<b>count</b> = models.IntegerField(default=1)
По сути, ManyToManyField
- это просто промежуточная модель с двумя ForeignKey
с участвующими моделями. Он также добавляет некоторые дополнительные функции для эффективного запроса с помощью ORM, но это все.
Здесь вы можете, например, запросить размеры для Product
, у которых есть хотя бы один count
:
myproduct.sizes.filter(<b>productsize__count__gt=0</b>)
Для получения дополнительной информации см. Документацию по параметру through=…
.
. В своем администраторе вы можете добавить эту модель как InlineModelAdmin
, как указано в этот ответ :
from django.contrib import admin
from app.models import Product, ProductSize
class <b>ProductSizeInline</b>(admin.TabularInline):
model = ProductSize
extra = 2
class ProductAdmin(admin.ModelAdmin):
inlines = (<b>ProductSizeInline</b>,)
admin.site.register(Product, ProductAdmin)