Python 无法在django模型中上载配置文件图片

Python 无法在django模型中上载配置文件图片,python,django,django-models,django-forms,image-uploading,Python,Django,Django Models,Django Forms,Image Uploading,我希望用户在配置文件页面上上传配置文件图片,但它没有将其存储在media/documents文件夹中,是的,我已将enctype=“multipart/form data”放入html表单中,方法是post。我是django的新手,所以请提供一个简单的解决方案 models.py class User(models.Model): first_name=models.CharField(max_length=20) last_name=models.CharField(max_length=20

我希望用户在配置文件页面上上传配置文件图片,但它没有将其存储在media/documents文件夹中,是的,我已将enctype=“multipart/form data”放入html表单中,方法是post。我是django的新手,所以请提供一个简单的解决方案

models.py

class User(models.Model):
first_name=models.CharField(max_length=20)
last_name=models.CharField(max_length=20)
username=models.CharField(max_length=25, primary_key=True)
password=models.CharField(max_length=15)
email_id=models.CharField(max_length=30, default='NULL')
profile_pic=models.ImageField(upload_to='profilepics/%Y/%m/%d/',height_field=200,width_field=200,default='')
forms.py

class ProfilePicForm(forms.ModelForm):
class Meta:
    model=User
    fields=['username','profile_pic']
class ProfilePicForm(forms.ModelForm):
      class Meta:
            model = UserPicture
            fields=['profile_pic']
views.py

def upload(request):
if request.method == 'POST':
    username=request.POST['username']
    m=User(username=username)
    m.profile_pic=request.FILES['profile_pic']
    m.save()
    return render(request,'LoginPage/done.html')
else:
    pic=ProfilePicForm()
    return render(request,'AfterLogin/profile.html')
html文件

    <form method="POST" enctype="multipart/form-data" action="{% url 'LoginPage:upload' %}">
        {% csrf_token %}
        <p>Upload your profile photo</p><br>
        <input id="id_image" type="file" class="" name="image">
        <input type="hidden" name="username" value="{{ username }}">
        <input type="submit" value="Submit"/>
    </form>

{%csrf_令牌%}
上传您的个人资料照片


看看这个:


另外,尝试分享上传图片时遇到的错误。

您不必定义自己的
用户
模型,因为Django有自己的:


正如Jonatan所建议的,发布错误代码。如果没有,请删除此
尝试。。。除了:pass

我认为您最好使用Django创建的标准用户模型,该模型已经包含了first\u name、last\u name、username、password和email字段。然后使用模型用户的OneToOneField创建一个新模型

如果图像上传,并且在运行服务器时直接转到图像url时得到404,那么您忘记了提供图像,这是在生产阶段必须做的

urlpatterns = [
...patterns...
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
像这样的方法应该会奏效:

模版

from django.contrib.auth.models import User    
class UserPicture(models.Model):
        user = models.OneToOneField(User, on_delete = models.CASCADE)
        picture = models.ImageField(upload_to='...')
forms.py

class ProfilePicForm(forms.ModelForm):
class Meta:
    model=User
    fields=['username','profile_pic']
class ProfilePicForm(forms.ModelForm):
      class Meta:
            model = UserPicture
            fields=['profile_pic']
views.py

def your_view(request):
    ...
    if request.method == 'POST':
        form = UserPicture(request.POST, request.FILES)

        if form.is_valid():
            userprofile = form.save()
            userprofile.user = request.user
            userprofile.save()

    ...

当一个代码中的某些内容不起作用时,最好发布错误代码。如何配置设置文件?没有任何错误。它只是不保存photomedia\u URL='/media/'media\u ROOT=os.path.join(BASE\u DIR,'media'),即使我删除了try和except语句,也没有任何与之相关的错误。我得到的只是这个内部服务器错误:/favicon.ico回溯(上次的最新调用):“未返回任何结果。”%(回调。\模块\视图\名称)ValueError:view LoginPage.views.upload没有返回HttpResponse对象,但我认为它与此无关。谢谢,但在此之后我有一个疑问。上传文件时,django如何知道照片是哪个用户的?在任何地方都没有提到。它将为哪个元组保存照片?用户模型中有ImageField。该字段存储图像的位置和名称,如“/home/user/project/media/your_pic.jpg”等。在上传时,django总是知道哪个用户发送了http请求。当用户在登录页面上通过身份验证时,他会被重定向到个人资料页面,在那里他必须上传个人资料图片。django还知道它是哪个用户吗?不知道。仍然不保存图像。已尝试代码如果用户已通过身份验证,则每个请求和响应都包含request.user中的用户实例。尝试在视图中打印request.user。此外,您正在尝试使用默认情况下django中存在的用户模型以外的用户模型。另外,您的上传视图不会返回任何响应。删除try-except循环并告知实际错误。有多个错误。在上传视图中,您在使用用户名之前没有定义用户名。我已将此部分添加到代码中。我如何使用django提供的用户模型和OnetoOne?另外,如果可能的话,请告诉我我可以在代码中做些什么更改以使其正常工作?