Django模型过滤并按特定列进行区分

时间:2017-09-13 13:24:56

标签: 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=255)

例如:

分类

         name        parent
         -------      -------
         vehicle        0
         car            1 
         motorcycle     1 
         truck          1 
         bicycle        1
         fff            0
         ....

品牌

            name      category
            ----      --------- 
            BMW        car
            BMW        truck
            BMW        bicycle
            toyota     car
            mercedes   car
            mercedes   truck
            someThing  fff
            ....

我想创建一个Brand的查询集,该查询集由车辆过滤并按名称区分。

所以我可以在我的模板中创建一个表单,该表单将包含一个下拉过滤器,其中所有品牌与车辆类别相关且没有名称重复

            name     category
            ----     --------- 
            BMW       car
            toyota    car
            mercedes  truck

有没有选择以简单的方式做到这一点,还是我需要为此编写一个函数?

我看到了一个例子 Select DISTINCT individual columns in django? 但它返回ValuesQuerySet我需要QuerySet,我不想使用仅在PostgreSQL上支持的().distinct('someItem')

1 个答案:

答案 0 :(得分:0)

避免在QuerySet中重复的最简单方法是在品牌和类别模型的名称字段中添加unique constraint。这将阻止重复插入到第一位。

当您尝试创建数据库中已存在名称的品牌或类别时,约束将导致抛出IntegrityError。您可以使用ModelName.objects.get_or_create代替ModelName.objects.create()来避免错误。