如何在不加入外键表的情况下订购与外键列相关的模型?通过外键的列为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