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,因此它将传递给这两行。