如何在不加入外鍵表的情況下訂購與外鍵列相關的模型?通過外鍵的列爲Django模型訂購而無需連接外鍵表?
舉例來說,如果我有:
class WidgetType(Model):
id = AutoField(primary_key=True)
label = CharField(max_length=16)
class Meta:
ordering = ["label"]
class Widget(Model):
type = ForeignKey(WidgetType)
怎樣才能查詢:
SELECT * FROM widgets_widget ORDER BY type_id
如果沒有外鍵表連接?
這似乎是<fk>_id
不能使用:
>>> Widget.objects.all().order_by("type_id")
FieldError: Cannot resolve keyword 'type_id' into field. Choices are: type
使用<fk>__id
似乎加入進來,然後忽略的FK表:
>>> print Widget.objects.all().order_by("type").query
SELECT * FROM widgets_widget
LEFT OUTER JOIN widgets_widgettype ON …
ORDER BY widgets_widget.type_id
而且使用<fk>
使用外資關鍵型號的默認訂購:
>>> print Widget.objects.all().order_by("type").query
SELECT * FROM widgets_widget
LEFT OUTER JOIN widgets_widgettype ON …
ORDER BY widgets_widgettype.label
着Django的版本,您正在使用?看來只有django1.7提供了沒有連接的order_by功能,你可以查看[這裏](https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by) – 2014-11-04 07:32:56
這是Django 1.5 。使用Django 1.7進行測試會產生相同的結果。 – 2014-11-06 18:10:03
啊,是的,但它確實看起來像'.order_by(「type_id」)'將在1.7中有效! – 2014-11-06 18:11:21