我的部分商业模式规定,某种类型的用户不能创建超过一定数量的“事物”。
让我用一些伪代码解释一下:
class Thing(Model):
owner = ForeignKey(User)
验证 a 的适当位置在哪里Form
,以便用户无法创建nth + 1
事物?
我的部分商业模式规定,某种类型的用户不能创建超过一定数量的“事物”。
让我用一些伪代码解释一下:
class Thing(Model):
owner = ForeignKey(User)
验证 a 的适当位置在哪里Form
,以便用户无法创建nth + 1
事物?
您可以将其添加到表单的clean()
方法中:
class ThingForm(forms.ModelForm):
def clean(self, *args, **kwargs):
cleaned_data = super(ThingForm, self).clean()
owner = cleaned_data.get("owner")
other_things_count = Things.objects.filter(owner=owner).count()
if other_things_count >= 20:
raise forms.ValidationError("Too many things!")
return cleaned_data
或者,您可以覆盖模型save()
方法,或者您可以创建一个触发的信号pre_save
,但是这些都不允许您将验证消息绑定到表单,所以我认为clean()
上面的方法是最好的。
编辑如果你想排除编辑,你可以检查是否ModelForm
有一个instance
,即一个现有的对象
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!")