如果是多个值,则在.values_list时排除对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果是多个值,则在.values_list时排除对象相关的知识,希望对你有一定的参考价值。

在我的模型中,我有一个值'type_name':

  class FooModel(models.Model):
       type_name = models.CharField(max_length=30)

在我的Views.py中,我想从DB生成一个带有这些type_name-inputs的QuerySet,但它不应该有多个相同值的时间。

我试过了:

  FooModel.objects.all().values_list('type_name', flat=True)

得到

 <QuerySet ['X', 'X', 'X', 'Y']>

但我需要的是:

 <QuerySet ['X', 'Y']>
答案

您可以通过向查询集添加.distinct()来为此添加“uniqness过滤器”(通常在数据库端执行):

FooModel.objects.all().values_list('type_name', flat=True).distinct()

这将生成一个如下所示的查询:

SELECT DISTINCT type_name
FROM app_foo_model

以上是关于如果是多个值,则在.values_list时排除对象的主要内容,如果未能解决你的问题,请参考以下文章

Django queryset values_list 是不是返回一个列表对象?

jQuery 如果输入值是默认值,则在提交时防止默认值

Django进阶-ORM框架的一般操作

MySQL查询时,怎么排除某个字段查询

如果值为空,则在 SQL 中生成一个新列,该列显示前一个单元格中的值

如何取消透视多个列并从任一列中排除值?