【问题标题】:Django forms all changes in other field except the image field is workingDjango 在其他字段中形成所有更改,除了图像字段正在工作
【发布时间】:2020-05-09 23:38:03
【问题描述】:

图像更改在 django admin 中起作用,但是当我尝试在 html 表单中更改相同时,除了图像字段之外的所有其他更改都被反映。

views.py

​​>
def edit_profile(request):
    if request.method == 'POST':
        form = EditProfileForm(request.POST, instance=request.user.userprofile)

        if form.is_valid():
            form.save()
            return redirect('view_profile')
    else:
        form = EditProfileForm(instance=request.user.userprofile)
        args = {'form': form}
        return render(request, 'post/update_profile.html', args)

update_profile.html

{% extends "post/header.html"%}
{% block content %}

<div class="container">
    <form method="post" enctype='multipart/form-data'>
        {% csrf_token %}
        <p >Bio:    {{ form.bio }}</p>
        <p> Phone    {{ form.phone }}</p>
        <p> Website : {{ form.website }} </p>
        <p> Image :  {{ form.image }}</p>
        <button type="submit">Submit</button>
    </form>
    <br>
</div>
{% endblock content %}

forms.py

​​>
class EditProfileForm(UserChangeForm):
     class Meta:
        model = UserProfile
        fields = (
            'bio',
            'phone',
            'website',
            'image',
        )

model.py

​​>
class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE)
    bio = models.CharField(max_length=100, default='',blank = True)
    website = models.URLField(default='',blank = True)
    phone = models.IntegerField(default=0,blank = True)
    image = models.ImageField(upload_to='profile_image',default = 'octocat.png')

    def __str__(self):
        return self.user.username

def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = UserProfile.objects.create(user=kwargs['instance'])
post_save.connect(create_profile, sender=User)

【问题讨论】:

    标签: django django-forms django-templates django-views django-admin


    【解决方案1】:

    views.py

    由于您尝试存储文件,因此您还需要在请求中提供request.FILES。

    def edit_profile(request):
            if request.method == 'POST':
                form = EditProfileForm(request.POST,request.FILES, instance=request.user.userprofile)
    
                if form.is_valid():
                    form.save()
                    return redirect('view_profile')
            else:
                form = EditProfileForm(instance=request.user.userprofile)
                args = {'form': form}
                return render(request, 'post/update_profile.html', args)
    

    【讨论】:

    • 谢谢,它运行良好。 else 部分不需要 request.FILES,因为这是空的数据字段,而不是显示已有的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    相关资源
    最近更新 更多