2016-07-21 18 views
0
String

Lassen Sie uns sagen, dass ich die folgenden ModelleFilter verwandte Modelle von

class PizzaOrder(models.Model): 
    order = models.CharField(max_length=200) 

class Topping(models.Model) 
    topping = models.CharField(max_length=50) 

und ein PizzaOrder wie diese

order = PizzaOrder.objects.create(
    order='large pizza with onions, mushrooms and tuna' 
) 

Ist es möglich, eine einzelne Abfrage durch Djangos ORM ausführen zu bekommen alle Toppings haben in diesem PizzaOrder verwendet?

Das funktioniert aber teuer:

for topping in Topping.objects.all(): 
    if topping.topping in order.order: 
     print("This order has a {} topping".format(topping.topping)) 
+1

'PizzaOrder' verwendet keines der' Topping's, da ist dort keine Beziehung definiert. Sie brauchen also keine Fragen, die Antwort ist immer Keine – Sayse

Antwort

0

Sie django Filter für diese nutzen könnten. Da Sie keine Beziehung zu Topping in der PizzaOrder-Tabelle haben, müssen Sie auf alle Toppings zugreifen, um in der Auftragstabelle zu suchen.

import operator 
from django.db.models import Q 

toppings = Topping.objects.all() 
topping_list = [topping.topping for topping in toppings] 
query = reduce(operator.and_, (Q(order__icontains= item) for item in topping_list)) 
orders = PizzaOrder.objects.filter(query).distinct() 

Aber ich eine Beziehung zwischen Topping und Ordnung wird dringend empfohlen Tabelle erstellen, wie es in hohem Grade Ihre Lookup-Abfrage optimieren.

Verwandte Themen