Python 使用过滤的foreignkey进行Django排序
我有以下设置Python 使用过滤的foreignkey进行Django排序,python,sql,django,Python,Sql,Django,我有以下设置 class ModelA(Model): field = CharField() order = IntegerField() class Meta: ordering: ['order'] class UserOrder(Model): modela = ForeignKey(ModelA) user = ForeignKey(User) order = IntegerField() class Me
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 a中执行以下操作:
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;
这将首先按自定义订单订购,然后按默认订单订购
我目前过滤查询集,并在DB调用后对其排序,但我希望有一种方法可以使用Django ORM在一次调用中直接从DB中排序。我总结:
ModelA.objects.filter(userorder__user__id=1).order_by('userorder__order', 'order')
这意味着,正如Daniel所写,您可以按照自己的意愿编写ORM,最后,一旦对queryset进行了评估,它将是一个单独的db调用 黑暗中拍摄:
ModelA.objects.filter(userorder\uu user\uu id=1)。order\u by('userorder\uu order','order')
?为什么您认为过滤后的排序不会是一个单独的db调用?上面两条评论所说的:)