2011-09-26 11 views
5

Tengo los siguientes modelos que representan libros y autores. Un solo libro puede tener varios autores y un autor podría haber escrito varios libros. Así que estoy usando el tipo ManyToManyField de Django para vincular los dos modelos entre sí.ManyToManyField Relaciones entre varios modelos

Puedo agregar un Book, usando el administrador de Django quizás, y crear un Author en el proceso. Pero cuando veo el Author que acabo de crear, no está vinculado al Book. Debo establecer explícitamente la relación inversa entre la instancia Author y la instancia Book.

¿Es así como es o podría estar haciendo algo diferente?

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) 

Respuesta

7

No necesita dos definiciones ManyToManyField porque la clase del modelo sin el ManyToManyField se relaciona con el otro a través de la relación inversa. Ver: https://docs.djangoproject.com/en/dev/topics/db/queries/#many-to-many-relationships

Si ha definido las dos clases del modelo como:

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) 

entonces para cualquier Author ejemplo a, a.book_set.all() consiste en los libros que escribió el autor (o co-escribió).

+0

¡Ahhh! Eso es genial. No sabía que funcionó de esa manera. ¡Muchas gracias! – Raj

Cuestiones relacionadas