Используя пример из документации , давайте предположим, что у меня есть модель Task
:
class Task(models.Model):
summary = models.CharField(max_length=32)
content = models.TextField()
reported_by = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
permissions = (
('view_task', 'View task'),
)
Допустим, в моем приложении много пользователей, и я хочу убедиться в следующем на уровне базы данных:
- Ни у одного пользователя нет повторяющейся задачи, т. Е. У пользователя может быть только одна задача под названием «Подметать пол».
- Пользователи не делятся задачами. Например, если у двух пользователей есть задача «Подметать пол», должно быть две задачи с
summary
«Подметать пол». на бэкэнде, по одному для каждого из двух пользователей
- Я не могу добавить поле
user
для модели Task
- мне нужно назначить владельца для Task
объектов через разрешения
Из коробки у django_guardian UserObjectPermission
есть ограничение unique_together
:
unique_together = ['user', 'permission', 'object_pk']
Я думаю , что я ищу, это ограничение unique_together
, которое больше похоже на этот псевдокод:
unique_together = ['user', 'permission', 'object_pk', 'task__summary']
Или, есть ли другой способ применить этот тип уникальности на уровне базы данных, используя разрешения Django Guardian?