Zuallererst muss ich zugeben, dass ich ziemlich neu in all diesen Coding-Sachen bin, aber da ich keine richtige Lösung finden konnte, mache ich es selbst und das Lernen von Code ist wahrscheinlich der beste Weg.Django - Wie baut man ein intermediäres m2m-Modell, das passt?/best practice
Wie auch immer, ich versuche eine App zu erstellen, um verschiedene Titelträger, Meisterschaften und solche Sachen zu zeigen. Nachdem ich die Django-Dokumentation gelesen hatte, fand ich heraus, dass ich Zwischenmodelle als einen besseren Weg verwenden muss. Mein alter models.py sieht wie folgt aus:
class Person(models.Model):
first_name = models.CharField(max_length=64)
last_name = models.CharField(max_length=64)
[...]
class Team(models.Model):
name = models.CharField(max_length=64)
team_member_one = models.ForeignKey(Person)
team_member_two = models.ForeignKey(Person)
class Championship(models.Model):
name = models.CharField(max_length=128)
status = models.BooleanField(default=True)
class Titleholder(models.Model):
championship = models.ForeignKey(Championship)
date_won = models.DateField(null=True,blank=True)
date_lost = models.DateField(null=True,blank=True)
titleholder_one = models.ForeignKey(Person,related_name='titleholder_one',null=True,blank=True)
titleholder_two = models.ForeignKey(Person,related_name='titleholder_two',null=True,blank=True)
Meisterschaft kann entweder durch Einzelpersonen oder Teams gewonnen werden, je nachdem, ob es sich um eine Einzel- oder Team-Meisterschaft ist, das ist, warum ich in der Titelverteidiger Klasse Fremdschlüssel hatte. Mit Blick auf die Django documentation scheint dies einfach falsch. Auf der anderen Seite, für mich als Anfänger, scheint das Zwischenmodell im Beispiel einfach nicht zu meinem Modell zu passen.
Lange Rede, kurzer Sinn: Kann mir jemand in die richtige Richtung zeigen, wie man das Modell richtig baut? Hinweis: Das ist nur eine Frage, wie man die Modelle erstellt und im Django-Admin anzeigt, ich spreche nicht einmal über das Erstellen der Templates ab sofort.
Hilfe würde sehr geschätzt werden! Vielen Dank im Voraus Jungs.
Djangos 'ManyToManyField' ist nur syntaktischer Zucker zum automatischen Erstellen und Abfragen einer Zwischentabelle. Wenn Sie die Tabelle explizit erstellen, wie Sie es hier getan haben, brauchen Sie das Feld nicht (obwohl es immer noch hilfreich sein kann). Es gibt jedoch eine Reihe von Problemen mit dem von Ihnen vorgestellten Schema. Keiner von ihnen hat etwas mit Django zu tun, es ist eine Frage der SQL-Datenbankmodellierung. Ich schlage vor, eine allgemeinere Frage zu stellen (* wie kann ich diese Daten modellieren? Hier ist, was ich versucht habe ... *) und es mit [Tag: Datenbank-Design] oder [Tag: Datenmodellierung] versehen. –