如何在django ORM中获取某个字段的所有值?

zqdjd7g9  于 2023-05-08  发布在  Go
关注(0)|答案(4)|浏览(185)

我有一个表叫user_info。我要所有用户的名字。所以这个表有一个名为name的字段。所以在sql中我做一些类似的事情

SELECT distinct(name) from user_info

但是我不知道如何在Django中做到这一点。通常,如果我已经知道了某个值,那么我可以做如下所示的事情。

user_info.objects.filter(name='Alex')

然后获取该特定用户的信息。
但是在这个例子中,对于给定的表,我想使用django ORM获取所有的name值,就像我在sql中所做的那样。
这是我的Django模型

class user_info(models.Model):
    name = models.CharField(max_length=255)
    priority = models.CharField(max_length=1)
    org = models.CharField(max_length=20)

我如何在Django中做到这一点?

csbfibhn

csbfibhn1#

可以使用values_list

user_info.objects.values_list('name', flat=True).distinct()

注意,在Python中,类通常在InitialCaps中定义:你的模型应该是UserInfo。

4szc88ey

4szc88ey2#

您可以使用丹尼尔的答案中给出的values_list(),它将在包含字段中的值的列表中为您提供数据。或者你也可以像这样使用values()

user_info.object.values('name')

它将返回一个包含字典的查询集。values_list()values()用于选择表中的列。

bcs8qyzn

bcs8qyzn3#

除了接受的答案之外,如果字段是外键,则在查询集中返回id值(数字)。因此,如果你期望在外键所属的模型中定义其他类型的值,那么你必须像这样修改查询:

`Post.objects.values_list('author__username')`
  • Post* 是一个模型类,它的外键字段是 author,而外键字段是 username:这里的author字段后面加了双下标,后面加了name字段,否则queryset会返回模型的主键。我想这是卡罗的疑问,在接受的答案。
ibrsph3r

ibrsph3r4#

这是我的燃烧速度的方式得到它!;)

names_list = list(
    UserInfo.objects.distinct().order_by('name').values_list('name', flat=True)
)

相关问题