Python 在Django中,如何将每个用户的条目限制为特定的数字N(N>;1)?
我有一个Django web应用程序,它类似于典型的问答系统 用户提出了一个问题。其他用户提交该问题的答案:Python 在Django中,如何将每个用户的条目限制为特定的数字N(N>;1)?,python,database,django,Python,Database,Django,我有一个Django web应用程序,它类似于典型的问答系统 用户提出了一个问题。其他用户提交该问题的答案: 每个用户最多可以提交N个问题的答案, 其中N>1(假设每个用户最多可以向 (每个问题) 用户可以编辑其现有答案,或者在需要时提交新答案 还没有达到他的极限 如果每个用户只允许一个答案,那么这样做很简单 -只要做: unique_together = (("user.id", "question_id"),) 但是在N>1的情况下,实现这一点的最佳方法是什么 我会将以下方法添加到您的
- 每个用户最多可以提交N个问题的答案, 其中N>1(假设每个用户最多可以向 (每个问题)
- 用户可以编辑其现有答案,或者在需要时提交新答案 还没有达到他的极限
unique_together = (("user.id", "question_id"),)
但是在N>1的情况下,实现这一点的最佳方法是什么 我会将以下方法添加到您的问题模型中:
class Question(models.Model):
def can_answer(self, user):
return Answer.filter(question=self, user=user).count() < 3
课堂问题(models.Model):
def can_应答(自身、用户):
返回Answer.filter(问题=self,用户=user).count()<3
您可以使用此方法来决定用户是否可以添加问题的答案。这是您必须在应用程序级别而不是数据库级别强制执行的业务规则。因此,您必须在回答时检查用户是否确实可以发布答案。这可以通过多种方式实现。安德烈是这样做的一种方式。另一种方法是在
Answer.save()
过程中检查这一点。如果您希望使逻辑远离模型,则可以定义一个实用函数can\u answer(user,question)
,该函数返回True
或False
,并从视图中调用它