2011-09-26 16 views
5

Ho i seguenti modelli che rappresentano libri e autori. Un singolo libro può avere più autori e un autore potrebbe aver scritto più libri. Quindi sto usando il tipo ManyToManyField di Django per collegare tra loro i due modelli.Relazioni ManyToManyField tra più modelli

Posso aggiungere un Book, utilizzando l'Admin Django forse, e creare un Author nel processo. Ma quando visualizzo lo Author ho appena creato che non è collegato allo Book. Devo impostare esplicitamente la relazione inversa tra l'istanza Author e l'istanza Book.

È proprio così o potrei fare qualcosa di diverso?

Models.py

class Book(models.Model):  
    book_title = models.CharField(max_length=255, blank=False) 
    authors = models.ManyToManyField('Author', blank=True) 

class Author(models.Model): 
    author_first_name = models.CharField(max_length=255, blank=False) 
    author_last_name = models.CharField(max_length=255, blank=False) 
    books = models.ManyToManyField(Book, blank=True) 

risposta

7

Non hai bisogno di due ManyToManyField definizioni perché la classe del modello, senza la ManyToManyField è legato all'altro attraverso il rapporto inverso. Vedere: https://docs.djangoproject.com/en/dev/topics/db/queries/#many-to-many-relationships

Se è stato definito le due classi del modello come:

class Book(models.Model):  
    book_title = models.CharField(max_length=255, blank=False) 
    authors = models.ManyToManyField('Author', blank=True) 

class Author(models.Model): 
    author_first_name = models.CharField(max_length=255, blank=False) 
    author_last_name = models.CharField(max_length=255, blank=False) 

allora per ogni Author esempio a, a.book_set.all() consiste dei libri che l'autore ha scritto (o co-scritto).

+0

Ahhh! È fantastico. Non sapevo che funzionasse in quel modo. Grazie molto! – Raj

Problemi correlati