Django - Kategorien, unique_together, Kategorien ansprechen/speichern?
Verfasst: Donnerstag 6. April 2017, 15:22
Hallo.
Angenommen ich möchte eine Website erstellen bei der ich Musiknoten in Kategorien einteile. Ich habe dazu folgendes Model:
Das funktioniert auch. Wir gehen jetzt davon aus das ALLE Kategorien dreistufig sind. Beispiele:
Klassik -> Geige -> Bach
Klassik -> Trompete -> Anfänger
Klassik -> Geige -> Anfänger
Genau jetzt kommt das Problem. Ich habe zwei mal den Eintrag "Anfänger", was ja nicht funktioniert. Ich habe nun also in der class Meta die Möglichkeit "unique_together" zu nutzen.
wie allerdings würde dies dann aussehen wenn ich alle drei Level zusammen haben möchte?
...funktioniert nicht und gibt die Fehlermeldung:
Ist dies bei einem self-referencing Model überhaupt möglich?
Und der zweite und eigentlich noch wichtigere Punkt:
Wie behandle ich dieses "unique_together" "dann? Ich möchte nämlich dass man bestimmte Notenkategorien abonnieren kann. Wie das bei einem normalen model (soll heissen: alle Unter-Unter-Kategorien sind unique und somit einzeln ansprechbar) geht weiß ich und es funktioniert auch. (ManyToManyField)
Aber wie spreche ich diese Kombination eines unique_together Feldes an?
Oder nehme ich einfach weiterhin die Unter-Unter-Kategorie und Django weiß automatisch dass auch wenn beide Unter-Unter-Kategorien "Anfänger" heissen, ein Anfänger zu "Geige" und ein Anfänger zu "Trompete" gehört?
Ich hoffe Ihr wisst was ich meine. Bitte daran denken, dass ich ein extremer Noob bin, also bitte drückt Euch noob-freundlich aus.
Vielen Dank schonmal!!
Angenommen ich möchte eine Website erstellen bei der ich Musiknoten in Kategorien einteile. Ich habe dazu folgendes Model:
Code: Alles auswählen
class NotenKategorie(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField()
parent = models.ForeignKey('self', null=True, blank=True)
Klassik -> Geige -> Bach
Klassik -> Trompete -> Anfänger
Klassik -> Geige -> Anfänger
Genau jetzt kommt das Problem. Ich habe zwei mal den Eintrag "Anfänger", was ja nicht funktioniert. Ich habe nun also in der class Meta die Möglichkeit "unique_together" zu nutzen.
wie allerdings würde dies dann aussehen wenn ich alle drei Level zusammen haben möchte?
Code: Alles auswählen
unique_together = ("title", "parent", "parent")
Code: Alles auswählen
django.db.utils.ProgrammingError: column "parent_id" appears twice in unique constraint
Und der zweite und eigentlich noch wichtigere Punkt:
Wie behandle ich dieses "unique_together" "dann? Ich möchte nämlich dass man bestimmte Notenkategorien abonnieren kann. Wie das bei einem normalen model (soll heissen: alle Unter-Unter-Kategorien sind unique und somit einzeln ansprechbar) geht weiß ich und es funktioniert auch. (ManyToManyField)
Aber wie spreche ich diese Kombination eines unique_together Feldes an?
Oder nehme ich einfach weiterhin die Unter-Unter-Kategorie und Django weiß automatisch dass auch wenn beide Unter-Unter-Kategorien "Anfänger" heissen, ein Anfänger zu "Geige" und ein Anfänger zu "Trompete" gehört?
Ich hoffe Ihr wisst was ich meine. Bitte daran denken, dass ich ein extremer Noob bin, also bitte drückt Euch noob-freundlich aus.
Vielen Dank schonmal!!