python-3.x - 在 Django 中为特定用户上传图像

标签 python-3.x django postgresql

我正在尝试为特定用户上传图片,但当我选择图像并上传时没有任何反应。它不存储在数据库中,甚至不存储在媒体文件夹中

设置.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
 })

模型.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但你的型号是Profile更正一下:

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

接下来在您的 View 中,如果发生 POST 请求,您的 View 是完全错误的。您尝试创建一个 Profile 实例并将其命名为 form 并保存它。这很可能会失败。我还假设你写 'SESSION_KEY' in request.session尝试检查用户是否已登录,请改用 request.user.is_authenticated或者实际上通过使用 login_required 禁止匿名用户访问您的 View 装饰师。像这样更改它:

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 代码风格指南。

关于python-3.x - 在 Django 中为特定用户上传图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66399920/

相关文章:

python - Django REST Framework 嵌套资源 key "id"无法访问

django - 检测 Django 模板中未设置的变量

sql - 我怎样才能让我的 Postgresql SELECT 从具有相同名称的列中返回数据?

javascript - Node postgres 并获取具有重复名称的连接字段

python - Coinbase Python API 上的分页

Python PDF>JPG转换与pdf2jpg

python - Django:TemplateDoesNotExist 在/home.html

node.js - Sequelize 返回未定义

Python Beautiful Soup——通过 Steam 的年龄检查

python - 在 azure 函数中找不到本地模块