В Django, как ограничить количество записей от каждого пользователя определенным числом N (N> 1)? - PullRequest
2 голосов
/ 12 августа 2010

У меня есть веб-приложение Django, похожее на типичную систему вопросов и ответов.

Пользователь задает вопрос. другие пользователи отправляют ответы на этот вопрос:

  • Каждый пользователь может отправить до N ответов на каждый вопрос, где N> 1 (скажем, каждый пользователь может отправить не более 3 ответов на каждый вопрос)
  • Пользователь может редактировать свои существующие ответы или отправлять новые ответы, если он еще не достиг своего предела.

Это просто сделать, если каждому пользователю разрешен только 1 ответ - просто сделайте:

unique_together = (("user.id", "question_id"),)

Но в случае N> 1, как лучше всего это реализовать?

Ответы [ 2 ]

2 голосов
/ 12 августа 2010

Это бизнес-правило, которое вам придется применять на уровне приложения, а не на уровне базы данных. Следовательно, во время ответа вам нужно будет проверить, действительно ли пользователь может опубликовать ответ. Это можно сделать несколькими способами. ответ Андрея - это один из способов сделать это. Другой способ - проверить это во время Answer.save(). Если вы предпочитаете держать логику подальше от моделей, вы можете определить служебную функцию can_answer(user, question), которая возвращает True или False, и вызывать ее из представления.

2 голосов
/ 12 августа 2010

Я бы добавил следующий метод к вашей модели Вопросов:

class Question(models.Model):

    def can_answer(self, user):
        return Answer.filter(question=self, user=user).count() < 3

Вы можете использовать этот метод, чтобы решить, может ли пользователь добавить ответы на вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...