阻止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件东西,并且想要编辑现有的东西时,这不会失败吗?输入错误。应该是
=
。我改了。这只是一个例子,条件可以是任何东西。