我在django中有一个带有文本框和文件字段的表单。它应该让使用将文本粘贴到该框或上传文件。如果用户已将文本粘贴到框中,我无需检查fileField。
如何制作forms.FileField()可选?
答案 0 :(得分:42)
如果您在forms.FileField()
派生类中使用forms.Form
,则可以设置:
class form(forms.Form):
file = forms.FileField(required=False)
如果您使用models.FileField()
并为该模型分配了forms.ModelForm
,则可以使用
class amodel(models.Model):
file = models.FileField(blank=True, null=True)
您使用的方法取决于您如何派生表格以及您是否使用基础ORM(即模型)。
答案 1 :(得分:0)
如果你想在用户提交表单之前这样做,你需要使用javascript(jquery,mootools等等都提供一些快速的方法)
在django方面,您可以在表单中以干净的方式执行此操作。这应该让您入门,您需要在模板上显示这些验证错误,供用户查看。 clean方法的名称必须与表单字段名称匹配,前缀为“clean_”。def clean_textBoxFieldName(self):
textInput = self.cleaned_data.get('textBoxFieldName')
fileInput = self.cleaned_data.get('fileFieldName')
if not textInput and not fileInput:
raise ValidationError("You must use the file input box if not entering the full path.")
return textInput
def clean_fileFieldName(self):
fileInput = self.cleaned_data.get('fileFieldName')
textInput = self.cleaned_data.get('textBoxFieldName')
if not fileInput and not textInput:
raise ValidationError("You must provide the file input if not entering the full path")
return fileInput
在模板上
{% if form.errors %}
{{form.non_field_errors}}
{% if not form.non_field_errors %}
{{form.errors}}
{% endif %}
{% endif %}