@iLLmano

Почему возникает ошибка:: (admin.E202) 'catalog.ProductSize' has no ForeignKey to 'catalog.Product'?

Описываю модель товара в интернет магазине. У товара должен быть размер, а у размера количество на складе.
Нужно при создании товара указывать какие размеры есть и проставлять их количество на складе.

Я описал модели так:

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'.


Что не так?
  • Вопрос задан
  • 323 просмотра
Пригласить эксперта
Ответы на вопрос 1
@iLLmano Автор вопроса
Разобрался. Надо было Inventory выводит в InLine, а не ProductSize
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы