首页 > 解决方案 > django将父母添加到字段

问题描述

我有一个具有多对多类别的产品模型。

类别有一个名为 parent 的 ForeignKey。

我想将所选类别的所有父母添加到类别字段。

类别示例:

数码电器->__ 手机->数码电器__ 三星->手机和...

当为产品类别选择三星时,我想将移动数字设备添加到类别中

这是我的模型,保存方法没有任何作用

类产品:

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()

类别和类别管理器:

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)

标签: djangodjango-models

解决方案


我认为将外键用于类别表而不是 m2m 关系更有意义。您可以在需要时将其展平在视图中


推荐阅读