Как я могу добавить дополнительное ограничение unique_together к разрешениям уровня объекта Django Guardian? - PullRequest
0 голосов
/ 02 января 2019

Используя пример из документации , давайте предположим, что у меня есть модель 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?

...