我正在使用Django。当我提交表单时,我的图像正在保存,但它没有保存到我的媒体目录。它只是保存文件。例如,它保存为“file.png”而不是“avatars/file.png”。我会注意到它是在管理门户中保存的。
以下是我的文件:
from django.db import models
from django.contrib.auth import get_user_model
class Profile(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
avatar = models.ImageField(default='avatars/Screenshot_2022-11-30_at_7.18.28_PM.png', upload_to='avatars/')
header = models.FileField(default='headers/Screenshot_2022-11-30_at_7.18.28_PM.png', upload_to='headers/')
followers = models.ManyToManyField(get_user_model(), related_name='followers', blank=True)
from django.shortcuts import render, redirect, HttpResponseRedirect
from django.contrib.auth import get_user_model
from django.views.generic import ListView, DetailView, View
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Profile
def updateProf(request):
Profile.objects.filter(user_id=request.POST['user_id']).update(avatar=request.FILES['avatar'])
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div class="signup-form">
<h2>Edit profile</h2>
<form method="post" action="/update-prof" enctype="multipart/form-data">
{% csrf_token %}
<input type="hidden" name="user_id" value="2">
<input type="file" name="avatar">
<button class="btn btn-success" type="submit">Save changes</button>
</form>
</div>
{% endblock %}
和我的设置/url文件:
一个三个一个
我原以为添加enctype字段/request.FILES可以解决这个问题,但它没有。有人知道如何将文件保存到avatars/吗?
1条答案
按热度按时间g52tjvyc1#
.update()
方法在数据库级别工作,将忽略upload_to
。如果使用了相同的文件名,它也可能会覆盖其他用户的头像,而实际上它应该使用唯一的文件名来存储文件。正确的方法是使用适当的表单根据用户输入更新数据,但如果您很着急,这也应该可以: