2014-07-23 18 views
5

Ich habe viele Beiträge gelesen, auf denen OneToOneField, ManyToManyField und Foreign Key sind, aber sie sind nicht sehr klar. Ich bin sehr neu in Django und Python-Programmierung, derzeit versuche ich, Modelle zu entwickeln. Kann mir jemand in einfacher Sprache erklären, vorzugsweise mit Beispiel, was sie sind?Django OneToOneField, ManyToManyField, Fremdschlüssel

Antwort

8

eine Datenbank Stellen Sie sich vor, die Ihre Büchersammlung speichert:

from django.db import models 

class Place(models.Model): 
    address = models.CharField(max_length=50) 
    country = models.CharField(max_length=50) 

class Publisher(models.Model): 
    name = models.CharField(max_length=30) 
    place = models.OneToOneField(Place, primary_key=True) 

class Author(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=40) 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    publisher = models.ForeignKey(Publisher) 
    authors = models.ManyToManyField(Author) 

One-to-many/Foreign Key

Alle Book hat ein Publisher, aber ein Publisher möglicherweise mehrere Bücher veröffentlicht haben. Sie stehen daher in einer Eins-zu-Vielen-Beziehung (Buch zu Verlag).

One-to-one

Jeder Publisher befindet sich in einem Place befindet, und jeder Place kann nur ein Publisher halten. Daher stehen sie in einer Eins-zu-Eins-Beziehung. Sie könnten einfach die Place Informationen (address und country) mit dem Publisher Modell in eine Tabelle legen, aber manchmal ist es bevorzugt, separate Modelle zu haben. Wenn Sie beispielsweise die Place für jede Publisher nicht kennen, brauchen Sie nicht viel Platz mit leeren Zeilen zu belegen.

Many-to-many

Jeden Book auch eine oder mehr Author s. Ein Author könnte jedoch mehrere Book s geschrieben haben, so dass sie sich in einer Viele-zu-Viele-Beziehung befinden.

Wenn Sie noch etwas Unterstützung benötigen, schlage ich vor, einen Blick auf the model chapter of the Django Book nehmen.

+1

Ausgezeichnete Antwort. Ich würde dem OP auch empfehlen, über Datenbankbeziehungen zu lesen, da sie direkt diese Django-Felder anwenden. Probieren Sie dies - http://code.tutsplus.com/articles/sql-for-beginners-part-3-database-relationships-net-8561 –

+0

Das hat alles für mich geklärt! Vielen Dank! Entschuldigung, ich habe nicht genug Reputation, um deine Antwort aufzufüllen =/ – Rjzheng

+0

@Rjzheng Glücklich zu helfen. (: – Banana

Verwandte Themen