在Django中,如何将每个用户的条目限制为特定的数字N(N> 1)?

时间:2010-08-12 16:57:52

标签: python database django

我有一个类似于典型Q& A系统的Django Web应用程序。

用户提出问题。其他用户提交该问题的答案:

  • 每个用户最多可以提交N个问题的答案, 其中N> 1(所以,说每个用户可以提交不超过3个答案 每个问题)
  • 用户可以编辑他现有的答案,或者提交新的答案(如果他) 尚未达到他的极限。

如果每个用户只允许1个答案,则可以直接执行此操作 - 只是这样做:

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

但是在N> 1的情况下,实现这个的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

我将以下方法添加到您的问题模型中:

class Question(models.Model):

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

您可以使用此方法来确定用户是否可以添加问题的答案。

答案 1 :(得分:2)

这是一项业务规则,您必须在应用程序级别而不是数据库级别强制执行。因此,您必须在回答时检查用户是否确实可以发布答案。这可以通过多种方式完成。安德烈的answer是这样做的一种方式。另一种方法是在Answer.save()期间检查这一点。如果您希望将逻辑与模型保持距离,则可以定义返回can_answer(user, question)True的实用程序函数False,并从视图中调用它。