Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Django中为特定用户上载图像_Python 3.x_Django_Postgresql - Fatal编程技术网

Python 3.x 在Django中为特定用户上载图像

Python 3.x 在Django中为特定用户上载图像,python-3.x,django,postgresql,Python 3.x,Django,Postgresql,我试图上传图片的具体用户,但没有发生什么事,当我选择图像和上传它。它不存储在数据库中,甚至不存储在媒体文件夹中 setting.py MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') MEDIA_URL = '/media/' View.py def uploadPic(request): if request.method == 'POST' and 'SESSION_KEY' in request.session: form

我试图上传图片的具体用户,但没有发生什么事,当我选择图像和上传它。它不存储在数据库中,甚至不存储在媒体文件夹中

setting.py

   MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
   MEDIA_URL = '/media/'
View.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/')
Form.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 %}
{%extends'home.html%}
{%block content%}
{%if user.u是否经过身份验证%}
{%csrf_令牌%}
{{form.as_p}}
上传
{%endif%}
{%endblock%}

首先在表单中设置
model=ProfileModel
,但您的模型是
Profile
请更正:

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['profile_pic']
接下来,在你的观点中,如果有POST请求,你的观点是完全错误的。您尝试创建一个Profile实例,将其称为form并保存。这可能会失败。此外,我假设您在request.SESSION中编写了
'SESSION\u KEY',试图检查用户是否登录,而使用
request.user.is\u authenticated
或实际上不允许匿名用户使用
login\u 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个空格。检查缩进,缩进是Python代码的样式指南。

@usmanimtiaz在请求中的“会话密钥”中使用该缩进做什么。会话
?您还将媒体URL添加到urlpatterns了吗?是的,我添加了URL:urlpatterns=[path('upload',views.uploadPic,name='upload'),]if settings.DEBUG:URLPerns+=static(settings.media\u URL,document\u root=settings.media\u root)非常感谢您的帮助,现在我的图片已显示在媒体文件夹和数据库中:)从Condition中删除session_key line后最后一件事我如何显示我的图片如果您想为一个用户保存多个图像,您当前的实现很好。否则,如果只想存储一个字段,则应该使用一对一字段而不是外键。如果要显示第一个图像,请使用当前实现:
{%with profile=request.user.profile_set.first%}{%endwith%}