我有一个类似于典型Q& A系统的Django Web应用程序。
用户提出问题。其他用户提交该问题的答案:
如果每个用户只允许1个答案,则可以直接执行此操作 - 只是这样做:
unique_together = (("user.id", "question_id"),)
但是在N> 1的情况下,实现这个的最佳方法是什么?
答案 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
,并从视图中调用它。