Python Django模型过滤器,并按特定列进行区分
我有两种型号Python Django模型过滤器,并按特定列进行区分,python,django,python-3.x,django-models,Python,Django,Python 3.x,Django Models,我有两种型号 class Category(models.Model): name= models.TextField(max_length=255) parent = models.ForeignKey('self', null=True, blank=True) class Brand(models.Model): category = models.ForeignKey(Category) name= models.TextField(max_length
class Category(models.Model):
name= models.TextField(max_length=255)
parent = models.ForeignKey('self', null=True, blank=True)
class Brand(models.Model):
category = models.ForeignKey(Category)
name= models.TextField(max_length=255)
例如:
类别
name parent
------- -------
vehicle 0
car 1
motorcycle 1
truck 1
bicycle 1
fff 0
....
烙印
我想创建一个品牌查询集,该查询集按车辆过滤,并按名称区分
因此,我可以在我的模板中创建一个表单,该表单将有一个下拉过滤器,其中包含与车辆类别相关的所有品牌,且没有名称重复
name category
---- ---------
BMW car
toyota car
mercedes truck
有没有简单的方法,或者我需要为此编写一个函数
我看到了一个例子但是它返回一个
ValuesQuerySet
,我需要一个QuerySet
,我不喜欢使用只有PostgreSQL支持的().distinct('someItem')
。避免查询集中重复的最简单方法是在品牌和类别模型的名称字段中添加一个。这将阻止在第一个位置插入重复项
当您试图创建数据库中已存在其名称的品牌或类别时,该约束将导致引发IntegrityError。您可以通过使用而不是
ModelName.objects.create()
避免错误,在数据库中不同类别使用相同品牌是可以的,但是如果我想按品牌过滤,用户不需要在下拉列表中看到重复名称,这将连接品牌和类别,这可能会导致重复。一种独特的方法会以稍微夸张为代价将其移除。Category.objects.filter(brand\u name\u in=(“BMW”,“toyota”)).distinct()通过pk查找品牌并传入:brands=brand.objects.filter(name\u in=(“BMW”,“toyota”))Category.objects.filter(brand\u id\u in=品牌)我需要将品牌加入到类别中,因为它们是相关的。用户可以将项目添加到系统中,当他这样做时,他必须只选择与类别相关的品牌,因此我会向他显示与他所在类别相关的品牌,他可以按品牌、类别或类别和相关品牌筛选项目
name category
---- ---------
BMW car
toyota car
mercedes truck