我有一个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)
答案 0 :(得分:2)
您应该尝试Note.objects.order_by("noterefs__start_ref")
documentation doesn't make this very clear,因为它使用了ForeignKey
到self
,但它确实有效。
现在,如果您对单个NoteRefs
有多个Note
,那么文档还会警告重复对象出现的可能性,因此您应该仔细检查一下。