我有一个django应用程序,其中包含以下模型:
class Business(models.Model, GetDistance):
business_name = models.CharField(max_length=128)
.
user = models.ForeignKey(User)
.
media_dir = models.CharField(max_length=256, blank=True)
.
business_image = models.ImageField(max_length=128, upload_to=upload_business_image_handler, blank=True, height_field='business_image_height', width_field='business_image_width')
business_image_height = models.IntegerField(blank=True, null=True)
business_image_width = models.IntegerField(blank=True, null=True)
然后我还定义了一个在“Business”模型中使用的上传处理程序:
def upload_business_image_handler(instance, filename):
# determine the upload path
.
return file_path
我有一个表单使用一些小部件改变输入字段的默认呈现,例如:
business_name = forms.CharField(widget=forms.TextInput(attrs={'size':'50', 'class': 'address'}), required=True)
在表单中,我没有指定business_image字段,因此采用模型的默认值。模板中的表单包含:
<form enctype="multipart/form-data" method="POST" action="">{% csrf_token %}
并且视图代码包含:
business_form = BusinessForm(request.POST, request.FILES, auto_id='id_registration_%s', branch_list = branch_list, country_list = country_list)
现在,当我在表单中输入一些数据并为business_image字段选择一个图像时,一切都按预期工作。该文件的名称位于Business对象中,文件将上载到'upload_business_image_handler'确定的目录中。但是当我将business_image字段更改为:
时business_image = models.ImageField(max_length=128, upload_to=upload_business_image_handler, height_field='business_image_height', width_field='business_image_width')
即。删除'blank = True'选项然后我总是得到'此字段是必需的'错误,即使我在business_image表单字段中选择了一个图像。
当我在视图中插入'assert False'时,我可以看到错误,但我也可以看到文件名和文件对象,所以我不明白错误信息。