[英]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.