Django - Kategorien, unique_together, Kategorien ansprechen/speichern?

Django, Flask, Bottle, WSGI, CGI…
Antworten
SnakeBite
User
Beiträge: 46
Registriert: Mittwoch 4. März 2009, 18:26

Hallo.

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)
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?

Code: Alles auswählen

unique_together = ("title", "parent", "parent")
...funktioniert nicht und gibt die Fehlermeldung:

Code: Alles auswählen

django.db.utils.ProgrammingError: column "parent_id" appears twice in unique constraint
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!!
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ein unique Constraint über parent und name reicht doch völlig aus um dein Ziel zu erreichen.
Antworten