2017-10-24 2 views
-1

Ich habe 2 Klassen, mit viele-zu-viele-Beziehung, mein Ziel ist es, eine 'Element' Liste mit Daten aus diesen 2 Modellen zu füllen, hier sind meine Modelle:Übergeben Sie viele-zu-viele Objekt an Variable

Hier
class Bakery(models.Model): 
    title = models.CharField('restaurant_name', max_length=100) 


class DeliveryService(models.Model): 
    title = models.CharField('deliveryservice_name', max_length=100) 
    bakery = models.ManyToManyField(Bakery) 

ist die Logik auf meine Ansichten 'file:

item = [] 
bakerys = Bakery.objects.all() 

for i in bakerys: 
    item.append(i.title) 
    item.append(i.deliveryservice.title) 

ich hoffe, Sie bekommen, was genau ich erreichen will. Meine aktuelle "views" Datei Logik ist falsch und ich weiß es, ich weiß einfach nicht, was ich tun kann, um dieses Problem zu lösen. Vielen Dank für Ihre Zeit.

+0

Zum einen erben Ihre Klassen nichts. Normalerweise sollten sie von "models.Model" erben. Ich empfehle Ihnen, das offizielle Tutorial und die Dokumentation zu lesen, da es Ihre Frage beantworten wird. https://docs.djangoproject.com/de/1.11/topics/db/models/ – sytech

+0

Natürlich erben sie von 'models.Model', ich zog es vor, sie hier nicht für den Hauptpunkt nicht abzulenken – Madi7

+0

ich nicht verstehe, was du hier machen willst ... ist es nur 'Bakery.objects.values ​​('title', 'deliveryservice__title')'? – Sayse

Antwort

1

Das folgende scheint zu tun, wonach Sie fragen. Aber es scheint seltsam, dass Sie eine Liste mit allen Titeln für verschiedene Objekte erstellen möchten, die alle zusammengemischt sind und wahrscheinlich Duplikate haben (wenn ein Lieferservice mit mehr als einer Bäckerei verbunden ist, wird er doppelt hinzugefügt).

item = [] 
bakerys = Bakery.objects.all() 

for i in bakerys: 
    item.append(i.title) 
    for j in i.deliveryservice_set.all(): 
     item.append(j.title) 

Sie sollten wirklich auf dem many-to-many functionality of the ORM nachlesen. Die Dokumentation ist ziemlich klar, wie man diese Dinge macht.

Sayse hatte auch eine gute Antwort, wenn Sie wirklich nur alle Titel wollen. Ihre Antwort gruppiert auch alles in Tupeln und erreicht es mit mehr Effizienz, indem sie weniger Datenbankabfragen verwendet. Ihre Antwort war: Bakery.objects.values('title', 'deliveryservice__title')