Sobes.tech
Back to questions
Junior — Middle
81

Каким образом в Django ORM осуществляется управление связью типа many-to-many?

Companies where asked
Стилсофт

Answer from AI

sobes.tech AI

В Django ORM связь many-to-many реализуется через специальную промежуточную таблицу, которая хранит пары ключей из связанных моделей.

По умолчанию Django автоматически создаёт эту таблицу, если явно не указана своя модель для связи.

Пример:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)

Здесь authors — это поле many-to-many, которое создаёт таблицу с двумя колонками: book_id и author_id.

Можно также определить свою промежуточную модель, если нужно добавить дополнительные поля:

class Authorship(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)
    role = models.CharField(max_length=50)  # например, "редактор"

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author, through='Authorship')

Таким образом, Django ORM управляет связью many-to-many через промежуточную таблицу и предоставляет удобный API для добавления, удаления и запроса связанных объектов.