首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -图片不会在我的个人资料页面上传和更改

Django -图片不会在我的个人资料页面上传和更改
EN

Stack Overflow用户
提问于 2020-04-18 19:07:33
回答 1查看 42关注 0票数 0

我在做我网站的个人资料页面。

更改用户名或电子邮件是有效的,但不能更改配置文件图片,我不明白为什么:(

我在"INSTALLED_APPS“中添加了我的配置文件应用程序,设置了MEDIA_ROOT和MEDIA_URL,并设置了urlspatterns:

代码语言:javascript
复制
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'home.apps.HomeConfig',
    'inscription.apps.InscriptionConfig',
    'profil.apps.ProfilConfig',
]

[...]

MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'

urls.py:

代码语言:javascript
复制
urlpatterns = [
    path('profil/', p.profil, name='profil'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我将用户链接到其配置文件,并在models.py中设置默认映像。

代码语言:javascript
复制
from django.db import models
from django.contrib.auth.models import User

class Profil(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='defaut.png', upload_to='image_profil')

    def __str__(self):
        return f'{self.user.username} Profil'

admin.py:

代码语言:javascript
复制
from django.contrib import admin
from .models import Profil

admin.site.register(Profil)

然后,我在forms.py中创建了配置文件修改表单:

代码语言:javascript
复制
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Profil

class FormulaireModifUtilisateur(forms.ModelForm):
    username = forms.CharField(
        label = 'Nom de compte',
        min_length = 4,
        max_length = 150,
        initial=User.username,
    )
    email = forms.EmailField(
        label = 'Email',
        min_length = 4,
        max_length = 150,
    )

    class Meta:
        model = User
        fields = ['username', 'email']

class FormulaireModifProfil(forms.ModelForm):
    image = forms.FileField(
        label = 'Image de profil'
    )
    class Meta:
        model = Profil
        fields = ['image']

然后我在views.py中使用了它:

代码语言:javascript
复制
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from .forms import FormulaireModifUtilisateur, FormulaireModifProfil

@login_required

def profil(request):
    if request.method == 'POST':
        u_form = FormulaireModifUtilisateur(
            request.POST,
            instance=request.user
        )
        p_form = FormulaireModifProfil(
            request.POST,
            request.FILES,
            instance=request.user.profil
        )
        if u_form.is_valid() and p_form.is_valid():
            u_form.save()
            p_form.save()
            messages.success(request, f'Votre compte a bien été mis à jour !')
            return redirect('profil')

    else:
        u_form = FormulaireModifUtilisateur(instance=request.user)
        p_form = FormulaireModifProfil()

    context = {
        'u_form': u_form,
        'p_form': p_form,
    }

    return render(request, 'profil/profils.html', context)

最后,我创建了我的个人资料页面:

代码语言:javascript
复制
{% extends "home/index.html" %}

{% block title %}
Profil
{% endblock %}

{% block content %}
<div id='profil'>
    <img src='{{ user.profil.image.url }}'>
    <form method="post">
        {% csrf_token %}
        {% for field in u_form %}
            <p>
                {{ field.label_tag }}<br>
                {{ field }}<br>
            </p>
        {% endfor %}
        {% for field in p_form %}
            <p>
                {{ field.label_tag }}<br>
                {{ field }}<br>
            </p>
        {% endfor %}
        {% for message in messages %}
            <p id="messages">{{message}}</p>
        {% endfor %}
    <button type="submit">Enregistrer</button>
    </form>
</div>
{% endblock %}

我看了类似问题的答案,但都没有用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-18 19:55:55

当您使用HTML表单中的文件时,应该添加enctype。

代码语言:javascript
复制
<form method="post" enctype="multipart/form-data">
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61294756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档