Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模型过滤器,并按特定列进行区分_Python_Django_Python 3.x_Django Models - Fatal编程技术网

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