我有这个模型
class Env(models.Model):
functional_count = models.PositiveIntegerField()
current_count = models.PositiveIntegerField()
现在我希望functional_count
始终小于current_count
。
所以在创作过程中
这是因为我希望current_count
在初始化。然后我的python代码从不允许current_count
位于functional_count
之上。在
问题在于更新。在
class EnvUpdate(UpdateView):
model = Capacity.models.Envapps
fields = ['functional_count']
template_name_suffix = '_update_form'
那么我要包括验证器吗?如果是,在哪里和如何?
或者其他选择是在get_success_url()
中验证。
还有其他解决办法吗?在
如果
functional_count
总是小于current_count
,那么应该在模型的clean()
方法中检查它,而不是随机的ModelForm
。模型clean()
将在正常ModelForm
验证期间调用。在假设您的更新是通过一个表单(正如使用
form_valid()
所建议的那样),也许您可以使用表单clean()
方法,如the documentation所述。这允许您对相互依赖的字段执行检查。文档中还有一个示例,可以让您更进一步。在更新
从您的评论中,我了解到您试图在
EnvUpdate
内部使用clean()
,它继承了基于类的UpdateView
视图。所有通过UpdateView
提供的mixin显然没有提供clean()
方法,因此不能重写它。在我实际上指的是表单类中的
clean()
(如下链接)。因此,看起来您需要创建自己的ModelForm类,类似于:然后在你看来:
^{pr2}$注意:这是完全未经测试的!我不知道},就像您在上面所做的那样。你可以很容易地尝试一下。在
clean()
中的比较是否有效(例如,如果form.instance.current_计数,wheterEnvUpdate
将重写form\u类(不应该,但我从未尝试过)。您甚至可以移除meta
子类,并从EnvUpdate
中提供model
和{相关问题 更多 >
编程相关推荐