我有以下设置
class ModelA(Model):
field = CharField()
order = IntegerField()
class Meta:
ordering: ['order']
class UserOrder(Model):
modela = ForeignKey(ModelA)
user = ForeignKey(User)
order = IntegerField()
class Meta:
unique_together = ['modela', 'user']
我想通过存储在UserOrder中的自定义订单来订购ModelA。我可以在SQL中执行以下操作:
SELECT * FROM modela a
LEFT JOIN userorder uo ON a.id = uo.modela_id
WHERE uo.user_id = 1
ORDER BY uo.order ASC, a.order ASC;
这将首先按自定义订单排序,然后按默认订单排序。
我目前正在过滤查询集,并在数据库调用之后对其进行排序,但我希望有一种方法可以使用Django ORM在一次调用中直接从数据库中订购它。
答案 0 :(得分:0)
我总结一下:
ModelA.objects.filter(userorder__user__id=1).order_by('userorder__order', 'order')
和Querysets in django are lazy,这意味着,正如Daniel写的那样,你可以按照你想要的方式编写你的ORM,最后,一旦评估了查询集,它将是一个单独的db调用。