2010-01-14 110 views
13

我想通过相关字段排序联系人的QuerySet。但是我不知道怎么做。 我试过这样,但它不起作用。django相关字段排序

foundContacts.order_by("classification.kam") 

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

(简化)模型是这样的:

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) 

回答

22

它应该是:

foundContacts.order_by("classification__kam") 

这里是使跨越关系查询的链接Django文档:http://docs.djangoproject.com/en/1.1/topics/db/queries/#lookups-that-span-relationships

您还可以在order_by参考中看到一些示例:
https://docs.djangoproject.com/en/1.6/ref/models/querysets/#django.db.models.query.QuerySet.order_by

+3

语法正确,但这与查看vs模板无关。你根本不能在模板中进行这种排序(因为模板语法不允许你用参数调用函数)。但是双下划线语法用于*函数调用中的所有关系遍历*过滤器,批注,order_by等。而正常的点语法用于当有对象并且想要引用相关对象时。 – 2010-01-14 17:23:02

+0

措辞不佳,我已将其删除。 – 2010-01-14 17:28:37

+0

好吧,它现在的作品。谢谢! – 2010-01-14 21:27:18