Django表单没有得到clean方法的值

 myfey 发布于 2023-02-06 15:45

我正在尝试从我的一个表单中编写一个干净的方法Django 1.5.用户可以从预先存在的对象列表中进行选择,也可以自己插入一个对象,但是他必须执行这两项操作中的一项(如果他同时执行这两项操作,ModelChoiceField则在相对视图中具有优先权).

这是有罪的形式:

class UploadFileForm(forms.Form):
    subject = forms.ModelChoiceField(queryset=Subject.objects.all(), required=False, label='What subject this file is about?')
    subject1 = forms.CharField(required=False, label="Or insert your subject if you didn't find it in the menu")

    def clean_subject(self):
        subject = self.cleaned_data.get('subject')
        subject1 = self.cleaned_data.get('subject1')
        if not subject and not subject1:
            raise forms.ValidationError('This field is required.')

whitch是相对于这个模型:

class Subject(models.Model):
    subject = models.CharField(max_length = 30, primary_key=True, blank=False, null=False)

问题是:如果用户让ModelChoiceField空并尝试CharField在表单中插入一个值,则无论如何都会引发错误(当然它不应该).

我也尝试过:subject1 = self.cleaned_data.get('subject1', None)但在这种情况下,subject1值总是None(所以问题基本相同).

我真的很疯狂试图解开原因.

1 个回答
  • 您应该使用clean方法而不是clean_<fieldname>验证彼此依赖的字段(Django clean()docs).

    class UploadFileForm(form.Form):
        subject = forms.ModelChoiceField(queryset=Subject.objects.all(), required=False)
        subject1 = forms.CharField(required=False)
    
        def clean(self):
            subject = self.cleaned_data.get('subject')
            subject1 = self.cleaned_data.get('subject1')
            if not subject and not subject1:
                raise forms.ValidationError('Subject field is required.')
            return self.cleaned_data
    

    2023-02-06 15:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有