django - 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)
解决方案
我认为将外键用于类别表而不是 m2m 关系更有意义。您可以在需要时将其展平在视图中
推荐阅读
- php - WordPress 中的 SVG 精灵:实现 SVG 精灵的最佳方式是什么?
- python - 更新旧 Python 代码 - CSV 读取和打印程序
- angular - 根据表单中的选择值隐藏/显示按钮
- react-native - React Native 如何在启动画面设置 Gif 图像?
- android - Android 解密 RSA 在有意义的结果之前返回抓取的代码
- opencl - opencl 中的 memcpy 等价物
- python - 使用 pandas 数据框中的随机图像创建多项选择 Google 表单
- r - 如何获取 geom_point 大小以反映实际值而不是相对值
- c# - 无法将 .bin.gz 文件添加为嵌入式资源
- azure-devops - 无法使用 Azure Devops 查询获得测试结果