Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Many-to-Many | Relations
Django ORM Ninja: Advanced Techniques for Developers

book
Many-to-Many

A Many-to-Many relationship occurs when each record in a model can be associated with many records in another model, and vice versa. This is facilitated by Django's models.ManyToManyField.

Let's explore the ManyToManyField with an example. In our project, we use two models: Author and Book. An author can write multiple books, and a book might be co-authored by multiple authors. This is a classic many-to-many relationship.

Let's implement it in our code. In the models.py add to the Book model a new field.

Accessing Related Records

From Author to Books:

python
author = Author.objects.get(pen_name="Richard Bachman")
books_written = author.book_set.all() # get all books written by this author

From Book to Authors:

python
book = Book.objects.get(title="Black House")
authors_of_book = book.authors.all() # get all authors of this book

Adding and Removing Relationships

Adding an author to a book:

python
author = Author.objects.get(pen_name="Richard Bachman")
book = Book.objects.
book.authors.add(author)

Removing an author from a book:

python
book.authors.remove(author)

Filtering with ManyToManyField

You can also filter queries based on Many-to-Many relationships. For example, to find all books co-authored by a specific author:

python
books = Book.objects.filter(authors__pen_name="Richard Bachman")

1. How can you access all books written by an author named 'Richard Bachman'?

2. What Django query is used to add an author to a book?

3. How can you find all books co-authored by 'Richard Bachman'?

question mark

How can you access all books written by an author named 'Richard Bachman'?

Select the correct answer

question mark

What Django query is used to add an author to a book?

Select the correct answer

question mark

How can you find all books co-authored by 'Richard Bachman'?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 4
some-alt