Django按相关字段排序

25

我想通过相关字段对联系人的QuerySet进行排序,但我不知道怎么做。 我尝试了这样做,但它并不起作用。

foundContacts.order_by("classification.kam")

实际上,在模板中,由于它是一对一关系,我可以通过contact.classification.kam访问联系人的kam值。

(简化后的)模型如下所示:

class Classification(models.Model):
    kam = models.ForeignKey(User)
    contact = models.OneToOneField(Contact)

class Contact(models.Model):
    title = models.ForeignKey(Title, blank=True, null=True)
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)
3个回答

49

3
语法是正确的,但这与视图和模板无关。在模板中根本无法执行此类排序(因为模板语法不允许您调用带有参数的函数)。但是双下划线语法用于所有关系遍历内部的函数调用-筛选,注释,order_by等。而正常的点语法是当您有一个对象并想引用相关对象时使用的。 - Daniel Roseman
抱歉,这段表述不够准确,我已将其删除。 - Mark Lavin
2
你需要在URL中替换版本号(例如1.6)为你想要查看的版本。dev版本将始终可用:https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.order_by - gonczor

0

我曾经为这个问题苦苦挣扎,以下是我的解决方法:

  1. 按“kam”(分类)字段排序的联系人:
show_all_contact = Contact.objects.all().order_by(title__kam)
  • 按用户电子邮件排序的分类(没有意义,只是展示它的工作原理):
  • show_all_clasification = Classification.objects.all().order_by(kam__email)
    

    0

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接