Django добавляет родителей к значениям полей

У меня есть модель Product, которая имеет ManyToMany к Category.

Категория имеет внешний ключ к себе с именем parent.

Я хочу добавить всех родителей выбранной категории в поле категории.

пример для категории:

цифровая техника->нет __ Mobile->цифровая техника __ Samsung->мобильная и...

когда я выбираю Samsung для категории товара, я хочу добавить Mobile и digital appliance к категории

это мои модели, метод сохранения ничего не делает

Класс продукта:

class Product(models.Model):
    STATUS_CHOICES = (
        ('s', 'show'),
        ('h', 'hide'),
    )
    title = models.CharField(max_length=150)
    slug = models.SlugField(max_length=170, unique=True)
    category = models.ManyToManyField(Category)
    thumbnail = models.ImageField(upload_to='images/products', default='images/no-image-available.png')
    image_list = ImageSpecField(source='thumbnail', processors=[ResizeToFill(400, 200)], format='JPEG',options={'quality': 75})
    image_detail = ImageSpecField(source='thumbnail', processors=[ResizeToFill(1000, 500)], format='JPEG',options={'quality': 100})
    description = models.TextField()
    inventory = models.IntegerField()
    features = models.ManyToManyField(Feature)
    status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='s')

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "product"
        verbose_name_plural = "products"

    def save(self, *args, **kwargs):
        for cat in self.category.all():
            if cat.parent:
                self.category.add(cat.parent)
        return super(Product, self).save(*args, **kwargs)

    objects = ProductManager()

Category и CategoryManager:

class CategoryManager(models.Manager):
    def no_parent(self):
        return self.filter(parent=None)

    def get_parent(self, parent):
        return self.filter(parent=parent)


class Category(models.Model):
    parent = models.ForeignKey('self', default=None, null=True, blank=True, on_delete=models.SET_NULL,related_name='children')
    title = models.CharField(max_length=40)
    slug = models.SlugField()
    status = models.BooleanField(default=True)

Я думаю, что более разумно иметь внешний ключ к таблице категорий, а не m2m-отношение. Вы можете сгладить его в представлении, когда это необходимо

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