About Defining Many-to-many Through Model
When you need extra fields for a many-to-many relationship, you use the through
model. In the through_fields
attribute of many-to-many relation, the first field of should point to this model, and the second one should point to the other related model. For example,
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
authors = models.CharField(max_length=200)
def __str__(self):
return self.title
class Reader(models.Model):
name = models.CharField(max_length=200)
reading_list = models.ManyToManyField(
Book, through="BookToRead", through_fields=("reader", "book")
)
def __str__(self):
return self.name
class BookToRead(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE)
reader = models.ForeignKey(Reader, on_delete=models.CASCADE)
priority = models.PositiveIntegerField()
added_date = models.DateTimeField()
def __str__(self):
return f"{self.reader} wants to read {self.book}"
Programming Development Databases Django 4.2 Django 3.2 Django 2.2
Also by me
Django Paddle Subscriptions app
For Django-based SaaS projects.
Django GDPR Cookie Consent app
For Django websites that use cookies.