【问题标题】:Update A Profile Picture In Django ImageField : Dynamic Method Used In Django Admin更新 Django ImageField 中的个人资料图片:Django Admin 中使用的动态方法
【发布时间】:2020-12-01 11:26:15
【问题描述】:

我的应用程序有一个系统,用户可以在其中上传他的个人资料图片。我后来创建了这个功能,所以使用了外键方法

这是模型

 class Profile_Pic(models.Model):
    user = models.ForeignKey(User, default='', null=False, on_delete=models.CASCADE, related_name='userPic')
    profile_pic = StdImageField(upload_to='photos', default='', blank=True, )

和html页面

{% extends 'datas/base.html' %}

{% block content %}
    {% load static %}
    <h1 class="text-center" style="color: white">Add Profile Picture</h1>
    <br><br>

     <div class= "col-md-6.offset-md-3">

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

    {% if form.errors %}
        <div class="alert alert-warning alert-dismissable" role="alert">
                    <button class="close" data-dismiss="alert">
                        <small><sup>x</sup></small>
                    </button>
            <p>Data Error, Please Check Again.....</p>
                    {% for field in form %}
                      {% if field.errors %}
                        {{ field.errors }}
                      {% endif %}
                    {% endfor %}
        </div>

    {% endif %}

    {{ form.as_p }}

    <input type="submit" value="Save" class="btn btn-primary">

    </form>

     </div>

{% endblock %}

视图

@login_required
def profile_pic(request):
    if request.method == 'POST':
        form = Photo(request.POST, request.FILES)
        if form.is_valid():
            form.instance.user = request.user
            form.save()
            messages.success(request, 'Your Profile Picture Has Been Updated Successfully')
            return redirect('profile')
    else:
        form = Photo()
    return render(request, 'datas/user_image.html', {'form': form})

最后是表格

class Photo(forms.ModelForm):
    class Meta:
        model = Profile_Pic
        fields = ['profile_pic']

        widgets = {
            'Add Profile Pic': forms.FileInput(attrs={'class': 'form-control'}),
        }
            

现在当我们从管理站点上传时,系统会自动删除同一模型上以前的照片,但是当从用户界面执行相同操作时,每次都会保存一个新模型,所以有没有办法让我可以更新已经创建的模型,所以我可以更新图片吗?

谢谢你.....

【问题讨论】:

    标签: python html django django-models imagefield


    【解决方案1】:

    在我看来你只有创建功能;你没有更新功能。

    在views.py 中,创建一个更新视图。您可能需要稍作调整。

    @login_required
    def update_profile_pic(request, pk):
        print('under update_profile_pic view')
    
        profile_pic = get_object_or_404(Profile_Pic, pk=pk) # get instance
    
        if request.method == 'POST':
            form = Photo(request.POST, request.FILES, instance=profile_pic) #note instance
    
            if form.is_valid():
                
                form.save()
                messages.success(request, 'Your Profile Picture Has Been Updated Successfully')
                return redirect('profile')
        else:
            form = Photo(instance=profile_pic) # note instance
        return render(request, 'datas/user_image.html', {'form': form})
    

    确保更新您的 urls.py

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 2020-04-26
      • 2020-04-26
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      相关资源
      最近更新 更多