Skip to main content
 首页 » 编程设计

python之Django:初始验证从对象实例创建的表单,而不是 POST

2024年08月30日29xing901022

我有一个表单,我想在最初显示它之前对其进行验证。基本上我想要的行为是当用户打开表单时,初始值(从对象实例中提取)已经被检查,如果无效,则标记为附加错误。

想法是有两种形式:

def DraftForm(forms.ModelForm): 
    class Meta: 
        model = Project 
 
def FinalForm(DraftForm): 
    def __init__(self, *args, **kwargs): 
        super(FinalForm, self).__init__(*args, **kwargs) 
        self.fields['text'].required = True 

第一个用于编辑草稿,第二个用于检查是否填写了发布所需的所有字段等。

我认为在“编辑项目” View 中这样的东西会起作用并使初始表单显示错误:

# redirected from some other form, so no POST at this point: 
if request.session.get('trying_to_publish', False): 
    form = FinalForm(instance=project) 
    form.is_valid() 
else: 
    form = DraftForm(instance=project) 
... 

但是没有; full_clean() 也不会触发错误。有什么想法吗?

请您参考如下方法:

您需要绑定(bind)表格。代替请求对象,您可以只使用一个空字典。

if request.session.get('trying_to_publish', False): 
    form = FinalForm({}, instance=project)   
    form.is_valid() 

is_valid()文档有助于对此进行一些解释(如果您知道自己在寻找什么)。必须先绑定(bind)表单,然后才能对其进行验证。即使传递空字典的表单也会变成 bound .