【问题标题】:Can Django's ORM return a nested object queryset?Django 的 ORM 可以返回嵌套对象查询集吗?
【发布时间】:2016-05-30 21:00:23
【问题描述】:

如果我有两个模型处于多对多关系中,如下所示:

class Topping(models.Model):
    name = models.CharField(max_length=50)

class Pizza(models.Model):
    name = models.CharField(max_length=50)
    toppings = models.ManyToManyField(Topping)

我可以创建一个查询集来给我这样的东西吗?:

[
  {
    "name": "Hawaiian",
    "toppings": [
      {"name": "Pineapple"},
      {"name": "Canadian Bacon"},
      {"name": "Cheese"}
    ]
  },
  {
    "name": "Pepperoni Pizza",
    "toppings": [
      {"name": "Pepperoni"},
      {"name": "Cheese"}
    ]
  }
]

我可以在一行中创建嵌套对象查询集吗?

【问题讨论】:

    标签: django django-models django-orm


    【解决方案1】:

    Django 目前不支持直接从查询中返回此类对象的查询方法,但是,您可以使用prefetch_relatedpizza 对象获取toppings,然后在python 中构建嵌套对象:

    pizzas = Pizza.objects.prefetch_related('toppings')
    
    nested_obj = [{"name": pizza.name, "toppings": [{"name": topping.name} for topping in pizza.toppings.all()]} for pizza in pizzas]
    

    您仍然可以使用一个查询。

    【讨论】:

    • 感谢摩西,这正是我想要的!
    • 2019年了,还是这样吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多