如何根据M2M的存在进行排序(披萨示例)



假设我有一个常见的披萨示例:

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")

现在假设我吃了一个有tomatocheesesalami的披萨。

我希望根据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')

相关内容

  • 没有找到相关文章

最新更新