Как в Django написать отношение, в котором первая модель связана ровно с четырьмя экземплярами другой?
Допустим, у меня есть два очень базовых класса модели - для простоты назовем их План и Задача. Моя цель - заставить каждый план иметь ровно 4 отдельные задачи (порядок не имеет значения). Есть ли какая-нибудь хорошая практика для этого случая "многие ко многим с фиксированным количеством связанных экземпляров"?
from django.db import models
class Task(models.Model):
name = models.CharField(max_length=20)
class Plan(models.Model):
name = models.CharField(max_length=20)
# four_tasks = ?
Я поискал в документации Django, но там нет ответа (или, возможно, я не знаю, как его искать). Я подумал о 4 отдельных внешних ключах (что должно быть возможно, если установить related_name
для них) в Plan, или о стандартных отношениях многие-ко-многим. Оба решения требуют дополнительных проверок, чтобы убедиться, что на самом деле существует 4 разных задачи, и, на мой взгляд, они выглядят некрасиво.
По моему мнению, с точки зрения баз данных, лучшей практикой было бы иметь 4 отдельных внешних ключа (как вы думали) в качестве первичного ключа (составного ключа).
В Django этого можно достичь, используя uniqueConstraint, что является более предпочтительным способом, чем unique_together:
UniqueConstraint обеспечивает большую функциональность, чем unique_together. unique_together может быть устаревшим в будущем.
EDIT: Если вам интересно, как его использовать, вот ответ