Описываю модель товара в интернет магазине. У товара должен быть размер, а у размера количество на складе.
Нужно при создании товара указывать какие размеры есть и проставлять их количество на складе.
Я описал модели так:
class ProductSize(models.Model):
"""Размер продукта"""
name = models.CharField(max_length=10, verbose_name="Размер")
class Meta:
ordering = ('name',)
verbose_name = 'Размер'
verbose_name_plural = 'Размеры'
def __str__(self):
return self.name
class Product(models.Model):
"""Model of product"""
category = models.ManyToManyField(Category, related_name="products", verbose_name='Выберите катeгорию')
group = models.ForeignKey(
ProductGroup, null=False, blank=False, verbose_name='Группа товаров', on_delete=models.CASCADE
)
name = models.CharField(max_length=200, db_index=True, verbose_name='Наименование')
slug = models.SlugField(max_length=250, db_index=True)
article = models.CharField(max_length=20, verbose_name='Артикул')
color = models.ForeignKey('ProductColor', null=False, blank=False, on_delete=models.CASCADE, verbose_name='Цвет')
image = models.ImageField(upload_to=upload_function, blank=True, verbose_name='Фото товара')
description = models.TextField(blank=True, verbose_name='Описание')
price = models.DecimalField(max_digits=15, decimal_places=2, verbose_name='Цена')
available = models.BooleanField(default=True, verbose_name='Доступно')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
size = models.ManyToManyField(ProductSize, through='Inventory')
class Meta:
ordering = ('name',)
index_together = (('id', 'slug'),)
verbose_name = 'Товар'
verbose_name_plural = 'Товары'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('shop:product_detail', args=[self.id, self.slug])
class Inventory(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
size = models.ForeignKey(ProductSize, on_delete=models.CASCADE)
quantity = models.IntegerField(verbose_name='Наличие на складе')
def __str__(self):
return f"{self.product} - {self.size} - {self.quantity}"
Чтобы вывести размеры в товаре в админке, я сделал так:
class ProductSizeInline(TabularInline):
model = ProductSize
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
inlines = [ImageGalleryInline, ProductSizeInline]
admin.site.register(ProductColor)
admin.site.register(ImageGallery)
admin.site.register(ProductSize)
admin.site.register(Category, CategoryAdmin)
admin.site.register(ProductGroup)
admin.site.register(Inventory)
Но у меня вылезает вот такая ошибка при миграции:
ERRORS:
: (admin.E202) 'catalog.ProductSize' has no ForeignKey to 'catalog.Product'.
Что не так?