假设我有一个常见的披萨示例:
class Topping(models.Model):
order = models.IntegerField()
name = models.CharField(max_length=250)
class Pizza(models.Model):
toppings = models.ManyToManyField(Topping)
带有以下浇头:
Topping.objects.create(order=1, name="tomato")
Topping.objects.create(order=2, name="cheese")
Topping.objects.create(order=3, name="olives")
Topping.objects.create(order=4, name="salami")
Topping.objects.create(order=5, name="onion")
Topping.objects.create(order=6, name="rocket")
现在假设我吃了一个有tomato
、cheese
和salami
的披萨。
我希望根据topping__order
获得披萨所有浇头的订单列表,以及它没有的所有浇头列表,也是由topping__order
订购的。
因此,它首先按披萨的浇头位置排序,其次按topping__order
字段排序。
结果将是具有与此相同信息的东西(可能在查询集中(:
{
{ "id": 1, "name": "tomato", "has_topping": True},
{ "id": 2, "name": "cheese", "has_topping": True},
{ "id": 3, "name": "salami", "has_topping": True},
{ "id": 2, "name": "olives", "has_topping": False},
{ "id": 5, "name": "onion" , "has_topping": False},
{ "id": 6, "name": "rocket", "has_topping": False},
}
这可以通过数据库查询实现吗?(我可以通过两个查询在Python中手动完成(
您可以使用.order_by((函数:
Pizza.objects.all().order_by('id', 'toppings__order')