2017-06-28 2 views
0

Ich habe dieses Muster schon oft gesehen, aber ich bin nicht sicher, warum Leute es benutzen und lernen möchten.Warum "Fremdschlüssel" in Django Models verwenden?

Hier ist kleine Kopie Paste auf was ich meine: Kategorie-Klasse ist eine Blog-Post-Kategorie, die die Fremdschlüssel Beziehung zu sich selbst hat. Was kann ich für eine solche Beziehung gewinnen?

class Category(models.Model): 
    name = models.CharField(max_length=32) 
    slug = models.SlugField(max_length=32) 
    parent = models.ForeignKey('self', blank=True, null=True) 

Hier ist der Post-Eintrag für das gleiche Modell. Hier finde ich es offensichtlich, dass Sie die Eintragskategorie als Schlüssel oder Benutzer haben möchten, wenn dieses Blog über ein Benutzersystem verfügt.

class Entry(models.Model): 
    title = models.CharField(max_length=64) 
    slug = models.SlugField(max_length=32, default='', blank=True) 
    created = models.DateTimeField(auto_now=True) 
    updated = models.DateTimeField(auto_now=True) 
    content = models.TextField() 
    category = models.ForeignKey(Category) 
+1

Dadurch kann eine Kategorie eine Unterkategorie einer anderen Kategorie sein. Im Wesentlichen erstellt dies eine Baumstruktur für Ihre Kategorien. Oder, wenn Sie sie in einem Zyklus verbinden, könnten Sie vermutlich andere seltsame Topologien erstellen. – Kendas

+0

https://docs.djangoproject.com/en/1.11/ref/models/fields/#foreignkey – Kendas

+0

Das macht eigentlich viel Sinn. Meine naive Version hätte ein anderes Modell verwendet, sagen wir "Unterkategorie" mit Schlüsselbeziehung zur Kategorie. Danke für die Klarstellung. –

Antwort

1

Hier können Sie mithilfe der Fremdschlüsselbeziehung zu self eine hierarchische Struktur für Ihre Kategorien erstellen. Wie Elternkategorien und Unterkategorien. In früheren Versionen war es TreeForeignKey.