2016-05-30 9 views
0

Wenn ich zwei Modelle in viele zu viele Beziehung wie unten:Kann Djangos ORM ein geschachteltes Objekt-Abfrage-Set zurückgeben?

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

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

Kann ich eine queryset schaffen, die mir etwas geben, wie dies ?:

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

Kann ich das verschachtelte Objekt erstellen queryset in einer Zeile?

Antwort

1

Django derzeit keine Abfrage-Methode unterstützt direkt für die Rückgabe solcher Objekte aus einer Abfrage, können Sie jedoch einen prefetch_related verwenden, um die toppings für die pizza Objekte zu erhalten, und dann verschachteltes Objekt in Python bauen:

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] 

Sie können immer noch eine Abfrage verwenden.

+0

Danke Moses, das ist, was ich gesucht habe! – aero

Verwandte Themen