阻止Django用户创建N个以上的项
我的商业模式的一部分规定,某种类型的用户不能创建超过一定数量的“东西” 让我用一些伪代码来解释:阻止Django用户创建N个以上的项,django,validation,Django,Validation,我的商业模式的一部分规定,某种类型的用户不能创建超过一定数量的“东西” 让我用一些伪代码来解释: class Thing(Model): owner = ForeignKey(User) 哪里是验证表单的合适位置,这样用户就不能创建n+1东西?您可以将它添加到表单的方法中: 或者您可以,或者您可以创建,但这两种方法都不允许将验证消息绑定到表单,因此我认为上面的clean()方法是最好的 EDIT如果要排除编辑,可以检查ModelForm是否有实例,即现有对象 other_things
class Thing(Model):
owner = ForeignKey(User)
哪里是验证
表单的合适位置,这样用户就不能创建n+1
东西?您可以将它添加到表单的方法中:
或者您可以,或者您可以创建,但这两种方法都不允许将验证消息绑定到表单,因此我认为上面的clean()
方法是最好的
EDIT如果要排除编辑,可以检查ModelForm
是否有实例,即现有对象
other_things_count = Things.objects.filter(owner=owner).exclude(pk=self.instance.pk).count()
您可以将其添加到表单的方法中:
或者您可以,或者您可以创建,但这两种方法都不允许将验证消息绑定到表单,因此我认为上面的clean()
方法是最好的
EDIT如果要排除编辑,可以检查ModelForm
是否有实例,即现有对象
other_things_count = Things.objects.filter(owner=owner).exclude(pk=self.instance.pk).count()
可以考虑在其中一个地方引发异常:
- 将代码绑定到
- 在模型出现的每种形式中
- (我最喜欢的方法)
引发异常的示例代码:
if myThing.pk is None and myThing.owner.thing_set.count() > n:
# here raise your exception:
raise ValidationError("Too many things!")
可以考虑在其中一个地方引发异常:
- 将代码绑定到
- 在模型出现的每种形式中
- (我最喜欢的方法)
引发异常的示例代码:
if myThing.pk is None and myThing.owner.thing_set.count() > n:
# here raise your exception:
raise ValidationError("Too many things!")
当用户有20件东西,并且想要编辑一件现有的东西时,这不是失败了吗?输入错误。应该是=
。我改了。这只是一个例子,条件可以是任何东西。当用户有20件东西,并且想要编辑现有的东西时,这不会失败吗?输入错误。应该是=
。我改了。这只是一个例子,条件可以是任何东西。