2012-03-29 18 views
1

Ich wollte eine Liste von Objekten erhalten, die Modell B von ManyToMany mit Modell B, z. Gäste (A) bestätigen, an einer Mahlzeit teilzunehmen (B). Aber ich bin mir nicht sicher, welchen Getter ich verwenden soll. Eigentlich wollte ich damit die zugehörigen Objekte im Admin-Panel anzeigen. Die Methode darunter war ein fehlgeschlagener Versuch, den ich gemacht habe.Django-Modell ManytoMany Getter

class Meal(models.Model): 
    diners = models.ManyToManyField(User, through='Attendance', related_name="eating", blank=True) 

    def diners(self): 
     return self.eating 

Können Sie helfen? Danke

+1

self.diners.all() ist was du brauchst? – ilvar

Antwort

1

Wie ilvar vorgeschlagen, entfernen Sie die Diner-Methode und verwenden Sie self.diners.all(), um Objekte in Meal-Methoden zu erhalten. related_name = 'essen' ist für das Abholen der besuchten Mahlzeiten eines Benutzers umgekehrt.

+0

Danke für Ihre Antworten. So in den Meal Modelle, habe ich: \t 'def Essen (Selbst-): \t Rückkehr self.diners.all()' und in der MealAdmin Datei Ich habe: 'Klasse MealAdmin (admin.ModelAdmin) : list_display = ('Zusammenfassung', 'wenn', 'Host', 'url', 'Gäste') Pass admin.site.register (Essen, MealAdmin) ' das gibt mir den Fehler: ** Ausnahmetyp: \t Unsachgemäß konfiguriert Ausnahmewert: \t 'MealAdmin .list_display [4] ',' diners 'ist ein ManyToManyField, das nicht unterstützt wird. ** – KindOfGuy

+0

@ user77510 list_display unterstützt nicht ManyToManyField. Wenn Sie Elemente des Abendessenfelds in Admin Änderungsliste anzeigen möchten, müssen Sie eine Methode schreiben, um den Inhalt der Spalte direkt zu rendern, refs https://docs.djangoproject.com/en/dev/ref/contrib/admin/ # django.contrib.admin.ModelAdmin.list_display – okm

+0

Ja, ich habe gesehen, wie dieser Thread gestartet wurde. Ich habe versucht, diese Methode wie oben und nach Ihrer Methode oben zu machen, aber ich stoße dann auf das Obenstehende. Diese Methode scheint nicht zu funktionieren. Was glaubst du? Danke – KindOfGuy

0

Ich kam auf dieser Seite mit dem gleichen Problem wie OP. Am Ende habe ich einfach den Verweis auf das ManyToMany-Feld in list_display in meinem Admin-Modell entfernt. Das Ergebnis: Auf der Admin-Seite für diese App erschien unter dem Feldnamen von ManyToMany ein gut formatiertes Auswahllisten-Widget mit den möglichen Werten für meine dargestellte ManyToMany-Beziehung.

Also die Lösung war, die Referenz in list_display zu entfernen und Django damit umgehen zu lassen. Dies ist mit Django 1.4.3.