如何使用.filter在Django中过滤列?

时间:2019-08-25 10:46:27

标签: django django-models django-views

我有以下一行:

test = MyModel.objects.filter(user=request.user)

此行的问题是它将检索整个行。如果我想从某个列中检索数据怎么办?例如,我正在尝试检索列email

,而不是整个行。

我尝试了此操作,但不起作用:email = test.email

1 个答案:

答案 0 :(得分:2)

您可以使用.values_list('email', flat=True) [Django-doc],例如:

test = MyModel.objects.filter(user=request.user).values_list('email', flat=True)

然后test是一个QuerySet,用于包装字符串。但是通常这不是好的软件设计。通常,它检索并存储User对象,而不是列值。一个模型可以添加很多额外的逻辑来防止某些值被存储,并且有时还包含额外的逻辑来进行验证,清除等。

如果User有一个 MyModel,则可以改用.get(..),例如:

the_email = MyModel.objects.get(user=user).email

或使用.values_list

the_email = MyModel.objects.values_list('email', flat=True).get(user=user)