我的表单没有将上传的图像保存在给定的路径中,我的代码:
models.py:
class MyClass(models.Model):
user = models.OneToOneField(SomeClass, on_delete=models.CASCADE)
address_line_1 = models.CharField(blank=True, max_length=100)
address_line_2 = models.CharField(blank=True, max_length=100)
profile_picture = models.ImageField(blank=True, upload_to='static/zzz/xxx/')
forms.py
class edit_profile_form(forms.Form):
profile_picture = forms.ImageField(label='Avatar',widget=forms.FileInput(
attrs={
'class': 'form-control input_data',
'placeholder': 'Upload',}))
views.py
def validate_edit_profile(request):
template = loader.get_template('account/edit_.html')
user_form = edit_profile_form(request.POST,request.FILES)
userprofile = EcomCustomerProfile.objects.get(user_id=request.user.id)
#if user submit
if request.POST:
if user_form.is_valid():
# get the data
first_name = user_form.cleaned_data['first_name']
last_name = user_form.cleaned_data['last_name']
phone = user_form.cleaned_data['phone']
profile_picture = user_form.cleaned_data['profile_picture']
#change db
get_user = EcomCustomer.objects.get(id = request.user.id)
get_user.first_name = first_name
get_user.last_name = last_name
get_user.phone = phone
get_user.profile_picture = profile_picture
user_form.save()
get_user.save()
return HttpResponse(template.render({'userprofile':userprofile}, request))
我使用两种形式:一种用于文本,另一种用于上传图像。 但它没有上传任何东西。
有什么问题吗?
看起来您的views.py 中尝试保存表单数据和用户实例时可能存在问题。以下是解决该问题的一些建议:
检查表单验证: 在尝试访问已清理的数据之前,请确保表单有效。在尝试访问已清理的数据之前,请使用
is_valid()
。
if user_form.is_valid():
# Your code for saving data
处理图片上传: 在您的代码中,您尝试分别保存表单数据和用户实例。相反,您应该保存用户实例以及关联的个人资料图片。
if user_form.is_valid():
get_user.first_name = first_name
get_user.last_name = last_name
get_user.phone = phone
get_user.profile_picture = profile_picture
get_user.save()
模型中的 ImageField 处理: 确保
upload_to
路径正确并且存在于您的项目结构中。 'static/zzz/xxx/' 路径应该相对于您的 MEDIA_ROOT。
profile_picture = models.ImageField(blank=True, upload_to='zzz/xxx/')
检查 HTML 表单中的 enctype 属性: 确保您的 HTML 表单为文件上传设置了正确的
enctype
属性。
<form method="post" enctype="multipart/form-data">
<!-- Your form fields here -->
</form>
进行这些调整,应该有助于解决图像未保存的问题。