Как сделать модель для подкатегории и категории для товара в django?

Мне нужно сделать модель продукта в django, где когда мы выбираем главную категорию, которая является внешним ключом, мы должны выбрать подкатегорию, проблема в том, что она будет показывать все подкатегории. она должна показывать подкатегории в соответствии с выбранной главной категорией

Модель основной категории

Здесь у нас только три поля

class Category(models.Model):
    image = models.ImageField(upload_to="maincategory",null=True)
    icon = models.CharField(max_length=200,null=True)
    title = models.CharField(max_length=200,null=True)

    def __str__(self):
        return self.title

Модель подкатегории

здесь мы указываем Главную категорию в качестве foreignkey

class SubCategory(models.Model):
    main_category = models.ForeignKey(Category,on_delete=models.CASCADE)
    title = models.CharField(max_length=200,null=True)

    def __str__(self):
        return self.main_category.title + " - " + self.title

Модель продукта

В модели продукта я дам два внешних ключа для главной и подкатегории

maincategory = models.ForeignKey(Category,on_delete=models.CASCADE,null=True,blank=True)

subcategory = models.ForeignKey(SubCategory,on_delete=models.CASCADE,null=True,blank=True)

class Product(models.Model):
    sts = (
        ("PUBLISH","PUBLISH"),
        ("DRAFT","DRAFT"),
    )
    vendor = models.ForeignKey(Vendor,on_delete=models.CASCADE)
    maincategory = models.ForeignKey(Category,on_delete=models.CASCADE,null=True,blank=True)
    subcategory = models.ForeignKey(SubCategory,on_delete=models.CASCADE,null=True,blank=True)
    title = models.CharField(max_length=200,null=True)
    description = models.TextField()
    price = models.IntegerField(null=True,default=0)
    discount = models.IntegerField(null=True,default=0)
    stock = models.IntegerField(null=True,default=0)
    size = models.CharField(max_length=200,null=True,blank=True)
    color = models.CharField(max_length=200,null=True,blank=True)
    date = models.DateTimeField(auto_now_add=True)
    slug = AutoSlugField(populate_from='title',unique=True,null=True,default=None)
    status = models.CharField(choices=sts,null=True)

    def __str__(self):
        return self.vendor + " - " + self.title
   

Как создать модель, в которой в админ панели django

выбирается подкатегория в соответствии с основной категорией.

Если все, что вы хотите сделать, это иметь вложенные подкатегории, вы можете посмотреть на django mptt django-mptt

или вы можете следовать этой статье в блоге simpleit

существует учебник по категориям с использованием django mptt. также вы можете дополнительно настроить django mptt, чтобы ограничить его глубину.

Вернуться на верх