Wie mache ich in Django viele-zu-viele-Felder optional?


202

Wenn Sie eine Viele-zu-Viele-Beziehung haben ( related_namenicht through) und versuchen, die Administrationsoberfläche zu verwenden, müssen Sie eine der Beziehungen eingeben, obwohl diese nicht vorhanden sein muss, damit Sie den ersten Eintrag erstellen können.

Ich erstelle eine App, die als Veranstalter fungiert. Stellen Sie sich vor wir hatten Eventund GroupModelle, gebunden mit many-to-many - Beziehung.

Django related_nameerstellt eine weitere Tabelle mit den Indizes der beiden anderen Tabellen.
Aber ich sehe keinen Grund, warum diese zusätzliche Tabelle ausgefüllt werden muss.

Wenn ich mit der Datenbank über phpMyAdmin arbeite, kann ich eine erstellen, Groupohne eine zu registrieren Event, da die Verbindung zwischen beiden nur über eine separate Tabelle erfolgt und auf einer bestimmten Ebene keine Durchsetzung von Datenbankwerten erfolgt.

Wie kann ich die Administrationsoberfläche so realisieren?
Wie mache ich das Viele-zu-Viele-Feld in Django optional?

Antworten:


348

Wenn Sie in der Lage sein möchten, die ManyToMany-Beziehung anzugeben, ohne dies erforderlich zu machen, verwenden Sie einfach blank=True:

class Group(models.Model):
    ...
    events = models.ManyToManyField(Event, blank=True)

7
Dies löst das Problem. Die Verwendung des Leerzeichens war für mich nicht so offensichtlich, da ich dachte, dass die Manytomany eine Tabelle erstellt hat, die die Ereignisse mit den Gruppen verknüpft (events = models.ManyToManyField (Event, related_name = "groups", blank = True). Daher war die Verwendung nicht klar Das Leerzeichen seit Event ist eigentlich kein Feld in der Gruppentabelle. Wie auch immer, es hat funktioniert, danke !!!
DZ.

9
@omouse Ich denke ja, leer ist für die Django-Validierung und null für die Datenbank. In diesem Fall (wie bei IntegerField) macht es keinen Sinn, eins ohne das andere zu setzen, denke ich
lajarre

17
Müssen Sie wirklich haben null=True? Ich hatte den Eindruck, nulldass es keine Auswirkungen auf ManyToManyFelder hat: stackoverflow.com/questions/18243039/…
Tyler Hayes

5
Ja, ähm @TylerHayes ist richtig. null = True ist im Grunde ein No-Op und im Kontext eines ManyToMany unsinnig. Ich bin offen dafür, gezeigt zu werden, wie ich mich irre.
Ben Roberts

7
null = True ist nicht erforderlich, zumindest ab Django 1.5.
Ville Laurikari
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.