django查询用于对作为外键存在的字段的数据进行排序

时间:2016-03-30 05:56:25

标签: python django django-orm

class abc(xyz):
    user = models.ForeignKey(User, max_length=100)

基于外键字段对数据进行排序的django查询是什么?

我尝试了查询:

  abc.objects.filter(User__user=user).
  abc.objects.filter(Q(user__icontains=search_query) ).

我已完成了这2个查询,但不知道如何组合&让它发挥作用

我不知道该怎么办。有人可以伸出援助之手吗?

2 个答案:

答案 0 :(得分:1)

第一个查询不适用于您的模型。将其更改为

qs = abc.objects.filter(user=user) 

现在,按user(或user_id或任何其他user的属性对此查询集进行排序

qs = qs.order_by('user_id')

没有多大意义,因为查询集中的所有元素都具有相同的用户。

第二个查询不起作用,因为icontains是一个适用于字符串的查询,而user是一个模型实例。以下可能有效:

 abc.objects.filter(user__username__icontains=search_query)  # .order_by('user__username')

通常,您可以按具有(自然)顺序的属性进行排序,例如整数,浮点数,字符串,日期等。因此,您可以按顺序排序。例如user_iduser__usernameuser__emailuser__date_joined

abc.objects.all().order_by('user_id')  # for instance

答案 1 :(得分:0)

我相信你想按用户的用户名排序。您可以通过以下方式完成:

main.cpp: In function 'int main()':
main.cpp:47:16: error: 'class CrtpGenr' has no member named 'funct1'
 crtp_obj1->funct1();
            ^
main.cpp:48:16: error: 'class CrtpGenr' has no member named 'funct2'
 crtp_obj1->funct2();

查看docs了解详情。

请注意双下划线' __'这里。在引用foreignkey的字段时,需要通过双下划线将foreignkey的字段与foreignkey分开。