【问题标题】:Profile isn't updating or updates aren't showing up in django配置文件未更新或更新未显示在 django 中
【发布时间】:2021-06-30 11:51:55
【问题描述】:

我正在尝试在 django 中创建一个页面,用户可以在其中查看他们的个人资料并编辑和保存更改,但是每次我点击保存按钮时,什么都没有发生,当我刷新页面时,信息不会得到更新。我做错了什么?

这是我的models.py:

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User,null= True ,on_delete= models.CASCADE)
    profile_pic = models.ImageField(null = True, blank= True)
    first = models.CharField(max_length=500, null=True)
    last = models.CharField(max_length=500, null=True)
    email = models.CharField(max_length=500, null=True)
    mobile_number = models.IntegerField(null=True)
    location = models.CharField(max_length= 500, null= True)
    postal = models.IntegerField(null=True)

    def __str__(self):
        return self.first

这是我的forms.py:

class ProfileForm(ModelForm):
class Meta:
    model = Profile
    fields = '__all__'
    exclude = ['user']
    widgets = {
        'profile_pic': forms.FileInput()
    }

这是我的views.py:

@login_required(login_url='Login')
def Profile(request):
    profile = request.user.profile
    form = ProfileForm(instance=profile)
    if request.method == 'POST':
        form = ProfileForm(request.POST, request.FILE, instance=profile)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reversed('Profile'))
    context = {'form': form}
    return render(request, 'profile.html', context)

这是我的模板:

<div class="col-lg middle middle-profile-con">

        <div class="img-cir profile-img">
            <img src="{{request.user.profile.profile_pic.url}}" alt="" width="100px" height="100px" class="pro-img">

        </div>

        <form method='POST' action="" enctype="multipart/form-data">
            {% csrf_token %}
            <div class="">
                <p class="my-name-pro">{{request.user.profile.first}}
                    <p>
                        <p class="my-email-id-pro">{{request.user.profile.email}} <br> {{form.profile_pic}}</p>

            </div>
            <div class="">
                <div class="pro-fn-div">
                    <label class="pro-fn-label">First name</label>
                    <div class="pro-fn-input"> {{form.first}} </div>
                </div>

                <div class="pro-ln-div">
                    <label class="pro-fn-label">Last name</label>
                    <div class="pro-fn-input"> {{form.last}} </div>
                </div>

                <div class="pro-email-div">
                    <label class="pro-fn-label">Email ID</label>
                    <div class="pro-fn-input"> {{form.email}} </div>
                </div>

                <div class="pro-pn-div">
                    <label class="pro-fn-label">Phone Number</label>
                    <div class="pro-fn-input"> {{form.mobile_number}} </div>
                </div>

                <div class="pro-lo-div">
                    <label class="pro-fn-label">Location</label>
                    <div class="pro-fn-input"> {{form.location}} </div>
                </div>

                <div class="pro-pc-div">
                    <label class="pro-fn-label">Postal Code</label>
                    <div class="pro-fn-input"> {{form.postal}} </div>
                </div>

                <button type="button" name="Update Information" class="btn btn-dark btn-sm pro-btn-save">Save Changes</button>

        </form>

        </div>

我不明白我哪里出错了。我需要在模板中添加一些东西吗?也许在保存按钮或其他地方?

【问题讨论】:

  • 你的 urls.py 在哪里?

标签: django django-models django-views django-forms django-templates


【解决方案1】:

您忘记注册您的网址,例如:

urls.py

from django.urls import path

from . import views

urlpatterns = [
    path('profile/', views.profile, name="profile"),
]

在您的模板中,编辑您的表单

<form method='POST' action="{% url 'profile' %}" enctype="multipart/form-data">

注意Python中的变量是小写的,最好遵循约定

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2015-06-19
    • 2021-11-25
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    相关资源
    最近更新 更多