Как сделать категории и подкатегории в Django
У меня есть модель товаров, категории и подкатегории. Подкатегория обязательно принимает категорию. А товар принимает категорию и подкатегорию, вот код:
class Product(models.Model):
photo = models.ImageField(verbose_name='Фотография', upload_to='products/')
name = models.CharField(verbose_name='Название', max_length=100)
description = models.TextField(verbose_name='Описание', blank=False)
price = models.PositiveIntegerField(verbose_name='Цена')
created_at = models.DateTimeField(verbose_name='Время создания', auto_now_add=True)
updated_at = models.DateTimeField(verbose_name='Время редактирования', auto_now=True)
is_published = models.BooleanField(verbose_name='Опубликован', default=True)
product_category = models.ForeignKey(verbose_name='Категория', to='Category', on_delete=models.PROTECT)
product_subcategory = models.ForeignKey(verbose_name='Подкатегория', to='SubCategory', on_delete=models.PROTECT,
null=True)
def __str__(self):
return self.name
class Meta:
verbose_name = 'Продукт'
verbose_name_plural = 'Продукты'
db_table = 'products'
ordering = ['-created_at']
class Category(models.Model):
name = models.CharField(verbose_name='Название', max_length=100)
description = models.TextField(verbose_name='Описание', blank=True)
created_at = models.DateTimeField(verbose_name='Время создания', auto_now_add=True)
def __str__(self):
return self.name
class Meta:
verbose_name = 'Категория'
verbose_name_plural = 'Категории'
db_table = 'categories'
ordering = ['-created_at']
class SubCategory(models.Model):
name = models.CharField(verbose_name='Название подкатегории', max_length=100)
description = models.TextField(verbose_name='Описание подкатегории', blank=True)
created_at = models.DateTimeField(verbose_name='Время создания подкатегории', auto_now_add=True)
subcategory_category = models.ForeignKey(verbose_name='Категория', to='Category', on_delete=models.PROTECT,
null=True)
def __str__(self):
return self.name
class Meta:
verbose_name = 'Подкатегория'
verbose_name_plural = 'Подкатегории'
db_table = 'subcategories'
ordering = ['-created_at']
Теперь в Django админке, у меня мой товар принимает категорию и подкатегорию. Но загвоздка в том что категория 'test' не имеет подкатегорию 'subcat'. В категории 'test' есть такие подкатегории как 'test1' 'test2'. Как мне в Django админке при создании товара, когда он будет выбирать подкатегорию показывать только подкатегории которые есть в категории которую он выбрал. Я пытался решить создав новую модель но у меня не получается! Прошу помочь)