按Django ORM中的相关字段排序

时间:2013-11-19 23:06:35

标签: django django-models

我有一个Notes和一个NoteRefs字段,其中NoteRefs有一个Notes的外键。我需要查询Notes但是按相关字段排序(即NoteRefs的start_ref字段)。

我怎么能通过django ORM做到这一点?这有点适用于SQL

SELECT 
   note.user_id,
   note.content,
   note.created,
   note.modified 
FROM noteref
INNER JOIN note
ON note.id = noteref.note_id
ORDER BY noteref.start_ref

我无法使用Note.order_by('related_field'),因为相关字段不是Note Model的一部分。据我所知,这似乎是文档所说的。我如何在这里对相关领域进行排序?

编辑:模型信息

class Note(models.Model):
    user = models.ForeignKey(User, db_index=True)
    content = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)


class NoteRef(models.Model):
    note = models.ForeignKey(Note, db_index=True)
    _order = models.IntegerField(default=0)
    book = models.IntegerField(max_length=2)
    start_ref = models.IntegerField(max_length=8, db_index=True)
    end_ref = models.IntegerField(max_length=8, db_index=True)
    ref_range = models.IntegerField()
    passage = models.CharField(max_length=50)

1 个答案:

答案 0 :(得分:2)

您应该尝试Note.objects.order_by("noterefs__start_ref")

documentation doesn't make this very clear,因为它使用了ForeignKeyself,但它确实有效。

现在,如果您对单个NoteRefs有多个Note,那么文档还会警告重复对象出现的可能性,因此您应该仔细检查一下。

相关问题