簡體   English   中英

為特定用戶上傳 Django 中的圖像

[英]Upload image in Django for specific user

我正在嘗試為特定用戶上傳圖片,但是當我上傳 select 圖像並上傳時沒有任何反應。 它不存儲在數據庫中,甚至不存儲在媒體文件夾中

設置.py

   MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
   MEDIA_URL = '/media/'

視圖.py

def uploadPic(request):
 if request.method == 'POST' and 'SESSION_KEY' in request.session:
     form = Profile(
         user_id=request.session['SESSION_KEY'],
         profile_pic=ProfileForm(request.POST, request.FILES)
     )
     form.save()
     return redirect('home')
 else:
     form = ProfileForm()
 return render(request, 'upload.html', {
     'form': form
 })

Model.py

class Profile(models.Model):
   user = models.ForeignKey(User, on_delete=models.CASCADE)
   profile_pic = models.ImageField(null=True, blank=True, upload_to='image/')

表格.py

class ProfileForm(forms.ModelForm):
   class Meta:
       model = ProfileModel
       fields = ['profile_pic']

模板

 {% extends 'home.html'%}
 {% block content %}

  {%if user.is_authenticated%}
    <form  method="post" enctype="multipart/form-data">
    {% csrf_token %}
       {{ form.as_p }}
        <button type="submit">Upload</button>
    </form>

  {% endif %}

 {% endblock %}

首先在您的表單中設置model = ProfileModel但您的 model 是正確的Profile

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['profile_pic']

接下來在您的視圖中,如果是 POST 請求,您的視圖是完全錯誤的。 您嘗試創建 Profile 的實例並將其命名為 form 並保存。 這很可能會失敗。 此外,我假設您'SESSION_KEY' in request.session嘗試檢查用戶是否已登錄,而不是使用request.user.is_authenticated或實際上禁止匿名用戶使用login_required裝飾器訪問您的視圖。 像這樣改變它:

from django.contrib.auth.decorators import login_required

@login_required
def uploadPic(request):
    if request.method == 'POST':
        form = ProfileForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.user = request.user
            form.save()
            return redirect('home')
    else:
        form = ProfileForm()
    return render(request, 'upload.html', {'form': form})

注意:我的答案的縮進是 4 個空格,這與您的縮進不同。 為了便於閱讀,最好縮進 4 個空格。 檢查PEP 8中的縮進,這是 Python 代碼的樣式指南。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM