【发布时间】:2013-11-19 23:06:35
【问题描述】:
我有一个 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'),因为相关字段不是笔记模型的一部分。据我所知,这似乎是文档所说的。如何在这里对相关字段进行排序?
编辑:模型信息
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)
【问题讨论】:
-
你能添加更多关于你的模型的细节吗
-
为什么不能选择所有按start_ref排序的NoteRef,然后调用noteref.note.
? -
你试过
Note.objects.order_by("noterefs__start_ref"),或者noterefs的相关名称是什么? -
Thomas,这种关系正好相反。 NoteRef 具有 Note 的外键。
-
@yekta 我明白,但这应该有效。 example in the documentation is quite poor — 因为
Event与self有关系,但我很确定这确实有效。
标签: django django-models