Python Django:基于外键限制数据库中的记录

Python Django:基于外键限制数据库中的记录,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我想将MyTable中的行数限制为每个用户2行 class MyTable(models.Model): user = models.ForeignKey(User) submission = models.CharField(max_length=100) 重写保存方法或在表单验证中检查此方法是否更好?如果是save方法,如何向用户返回错误?使用clean方法检查每个用户的表中是否已经有2行 def clean(self): if MyTable.objects.fi

我想将
MyTable
中的行数限制为每个用户2行

class MyTable(models.Model):
    user = models.ForeignKey(User)
    submission = models.CharField(max_length=100)

重写
保存
方法或在
表单验证
中检查此方法是否更好?如果是save方法,如何向用户返回错误?

使用clean方法检查每个用户的表中是否已经有2行

def clean(self):
    if MyTable.objects.filter(user=self.user).count()>=2:
        raise ValidationError('Only 2 entries per user allowed')

谢谢你的密码。你为什么喜欢这个方法而不是重写save方法?好吧,clean方法就是出于这个原因。这也会将验证错误传播到模型表单和管理员,但如果您重写save方法,则向用户显示错误发生的原因和时间会有点问题。表单没有
用户
字段,该字段是从当前登录的用户(即
请求.user
)推断出来的。它只是从
POST
@dekomote获取
submission
字段。如果您试图一次保存多行,则此操作将失败。如果当前计数为1,并且您尝试保存2行,则在保存之前将调用clean,因此它将传递给这两行。