You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django表单提交时图片字段无法保存的问题求助

Django表单提交时图片字段无法保存的问题求助

大家好,我现在遇到一个Django表单的问题,想请教下各位:

我写的ModelForm在提交时,其他所有字段都能正常更新到数据库,唯独图片字段没有变化。我猜测可能是views.py里的request.FILES处理有问题,但不是100%确定。

补充个小细节:如果直接在Django后台上传图片,图片字段是能正常更新的,只有通过前端表单提交的时候才会出现这个问题。

下面是我的代码:

views.py

def account_view_myaccount_edit(request):
    user_profile = User_Info.objects.filter(user=request.user)
    instance = User_Info.objects.get(user=request.user)
    user = request.user

    if request.method == 'POST':
        form = HomeForm(request.POST, request.FILES, instance=instance)
        if form.is_valid():
            listing_instance = form.save(commit=False)
            listing_instance.user = user
            listing_instance.save()
            return redirect('myaccount_edit')  # Redirect to a success page
    else:
        form = HomeForm(instance=instance)

    context = {
        'user_profile': user_profile,
        'form': form
    }
    return render(request, 'myaccount_edit.html', context)

models.py

class User_Info(models.Model):
    id = models.IntegerField(primary_key=True, blank=True)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics', null=True, blank=True)
    user = models.OneToOneField(settings.AUTH_USER_MODEL,blank=True, null=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=100)
    city = models.CharField(max_length=100)
    state = models.CharField(max_length=100)
    zip_code = models.CharField(max_length=100)
    mobile_number = models.CharField(max_length=100, blank=True)

    class Meta:
        verbose_name_plural = "User Info"

forms.py

class HomeForm(forms.ModelForm):
    image  = forms.ImageField(required=True, label=_("image"), widget=forms.TextInput(attrs={'type': 'file', 'id': 'upload-btn', 'accept': 'image/gif, image/jpg'}))
    name = forms.CharField(required=True, label='', max_length=100,  widget=forms.TextInput(attrs={'class': 'form-control info-details'}))
    address = forms.CharField(required=True, label='', max_length=100,  widget=forms.TextInput(attrs={'class': 'form-control info-details'}))
    city = forms.CharField(required=True, label='', max_length=100,  widget=forms.TextInput(attrs={'class': 'form-control info-details'}))
    state = forms.CharField(required=True, label='', max_length=100,  widget=forms.TextInput(attrs={'class': 'form-control info-details'}))
    zip_code = forms.CharField(required=True, label='', max_length=100,  widget=forms.TextInput(attrs={'class': 'form-control info-details'}))
    mobile_number = forms.CharField(required=True, label='', max_length=100,  widget=forms.TextInput(attrs={'class': 'form-control info-details'}))

    class Meta:
        model = User_Info
        fields = ['name', 'address', 'city', 'state', 'zip_code', 'mobile_number', 'image']

myaccount_edit.html(前端表单模板)

<form action="" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.errors }}

    <p>Name</p>
    {{ form.name }}

    <p>Address</p>
    {{ form.address }}

    <p>City</p>
    {{ form.city }}

    <p>State</p>
    {{ form.state }}

    <p>Zip Code</p>
    {{ form.zip_code }}

    <p>Mobile Number</p>
    {{ form.mobile_number }}

    <p>Upload Profile Photo</p>
    {{ form.image }}

    <br/>
    <br />
    <button class="btn btn-round btn-accept" type="submit" value="Submit"><i class="zmdi zmdi-favorite-outline6"></i>Submit</button>
    <br/>
    <a class="btn-cancel" href="{% url 'myaccount' %}">Cancel</a>
</form>

base.html(显示头像的模板)

<div class="profile-image-side">
    {% if user.is_authenticated %}
        {% for profile in user_profile %}
            <img src="{{ profile.image.url }}" >
            <p class="m-b-0">{{ user.username }}</p>
        {% endfor %}
    </div>
</div>

我还附上了Django后台和前端显示数据的截图,希望能帮大家定位问题。

Any help is gladly appreciated. Thanks!

备注:内容来源于stack exchange,提问作者spidey677

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:23:08