Django表单永远无效

2024-06-16 12:28:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个没有模型的窗体。这是我的形式课:

class LinkAssetsForm(forms.Form):
    preview = forms.ChoiceField()
    thumbnail = forms.ChoiceField()
    banner = forms.ChoiceField()

    def __init__(self, *args, **kwargs):
        super(LinkAssetsForm, self).__init__()

        filepod = kwargs.get('filepod',None)

        if filepod is not None:
            fp_util = FilePodUtil()
            preview_files = fp_util.get_files_from_filepod(filepod, ['mov'])
            thumbnail_files = fp_util.get_files_from_filepod(filepod, ['jpg'])        
            banner_files = fp_util.get_files_from_filepod(filepod, ['jpg']) 
            self.fields['preview'].choices = [(x.fullpath, x.name) for x in preview_files]
            self.fields['thumbnail'].choices = [(x.fullpath, x.name) for x in thumbnail_files] 
            self.fields['banner'].choices = [(x.fullpath, x.name) for x in banner_files] 

我的模板:

^{pr2}$

在我看来:

def post(self, request, *args, **kwargs):
    form = LinkAssetsForm(request.POST)
    if form.is_valid():

        print 'VALID=====>>>>>>>>>>'

        data = form.cleand_data
        #TODO: save the data

        messages.add_message(self.request, messages.SUCCESS, "Assets linked successfully.")
        return redirect(reverse('delivery:delivery-content-link-assets', args=[self.kwargs['delivery_id'],self.kwargs['content_id']])) 
    else:
        print 'INVALID=====>>>>>>>>>>'
        messages.add_message(self.request, messages.ERROR, "Select all the required fields.")

我的问题是表单从不通过if form.is_valid()条件。表单呈现正确,我在组合框中选择值,提交到正确的地址,等等。。它总是无法通过验证。在

你能看到我遗漏了什么吗?在

谢谢你的帮助。在


Tags: selfformfieldsgetrequestutilformsfiles
3条回答

我发现在表单从未被验证的情况下,这是因为它需要所有字段,而这些字段并不总是必需的。在您的表单字段中设置required=False,即:

banner = forms.ChoiceField(required=False) 

如果不总是向字段传递值,可能会有所帮助。在

你可以试着添加

{{ form.errors }} 
{{ form.non_field_errors }}

模板显示错误-这可以给你一个提示。在

p.S.“cleand\u数据”-是打字错误吗?在

当您调用super()时,您忘记了传递arg和kwargs。它应该是:

def __init__(self, *args, **kwargs):
    super(LinkAssetsForm, self).__init__(*args, **kwargs)

相关问题 更多 >