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:
pythonauthor = Author.objects.get(pen_name="Richard Bachman")books_written = author.book_set.all() # get all books written by this author
From Book to Authors:
pythonbook = 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:
pythonauthor = Author.objects.get(pen_name="Richard Bachman")book = Book.objects.book.authors.add(author)
Removing an author from a book:
pythonbook.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:
pythonbooks = 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'?
Grazie per i tuoi commenti!