Html 使用带有初始关键字的模型表单更新Django用户
我正在尝试使用模型表单更新用户配置文件,方法是使用初始关键字传递已存储的用户详细信息。我不知道我的代码出了什么问题。当我点击提交按钮时,它只是重新加载相同的页面,而不是更新/保存详细信息。我需要一些帮助来解决这个问题Html 使用带有初始关键字的模型表单更新Django用户,html,django-models,django-forms,django-templates,django-views,Html,Django Models,Django Forms,Django Templates,Django Views,我正在尝试使用模型表单更新用户配置文件,方法是使用初始关键字传递已存储的用户详细信息。我不知道我的代码出了什么问题。当我点击提交按钮时,它只是重新加载相同的页面,而不是更新/保存详细信息。我需要一些帮助来解决这个问题 ## views.py ## def personal_details_update(request): if not request.user.is_authenticated(): return HttpResponse
## views.py ##
def personal_details_update(request):
if not request.user.is_authenticated():
return HttpResponseRedirect('/login/')
else:
user = request.user
data = {
'username': user.username,
'email': user.email,
'first_name': user.first_name,
'last_name': user.last_name,
'address': user.address,
'city': user.city,
'state': user.state,
'country': user.country,
'mobile': user.mobile,
}
form = PersonalDetailsForm(request.POST or None, initial=data)
if request.method == 'POST':
if form.is_valid():
user.username = request.POST['username']
user.email = request.POST['email']
user.first_name = request.POST['first_name']
user.last_name = request.POST['last_name']
user.address = request.POST['address']
user.city = request.POST['city']
user.state = request.POST['state']
user.country = request.POST['country']
user.mobile = request.POST['mobile']
user.save()
return HttpResponseRedirect('/personal_details/')
# return HttpResponseRedirect('%s' % (reverse('personal_details')))
context = {
'form': form,
}
return render(request, 'login/personal_details_update.html', context)
def personal_details(request):
if not request.user.is_authenticated():
return HttpResponseRedirect('/login/')
else:
return render(request, 'login/personal_details.html')
## urls.py ##
from django.conf.urls import url
from . import views
app_name = 'login'
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^about us/$', views.about_us, name='about_us'),
url(r'^services/$', views.services, name='services'),
url(r'^registration/$', views.registration, name='registration'),
url(r'^login/$', views.login_user, name='login'),
url(r'^admin/$', views.admin_login, name='admin_login'),
url(r'^logout/$', views.logout_user, name='logout'),
url(r'^personal_details/$', views.personal_details, name='personal_details'),
url(r'^personal_details/update/$', views.personal_details_update, name='personal_details_update'),
]
## forms.py ##
from django import forms
from .models import User
from django.contrib.admin.widgets import AdminDateWidget
class UserForm(forms.ModelForm):
date_of_birth = forms.DateField(widget=AdminDateWidget)
password = forms.CharField(widget=forms.PasswordInput)
confirm_password = forms.CharField(widget=forms.PasswordInput)
class Meta:
model = User
fields = ['username', 'email', 'first_name', 'last_name', 'date_of_birth', 'address', 'city', 'state',
'country', 'mobile', 'avatar', 'password', 'confirm_password']
class PersonalDetailsForm(forms.ModelForm):
date_of_birth = forms.DateField(widget=AdminDateWidget)
class Meta:
model = User
fields = ['username', 'email', 'first_name', 'last_name', 'address', 'city', 'state',
'country', 'mobile']
exclude = ['date_of_birth', 'avatar', 'password', 'confirm_password']
## personal_details.html ##
{% extends 'upload/base.html' %}
{% block title %}Cloud | Personal Details{% endblock %}
{% block folders_active %}active{% endblock %}
{% load staticfiles %}
{% block navigation%}
<div class="container-fluid files-container">
<div class="row">
<div class="col-sm-12 col-md-4">
<div class="panel panel-default" style="background: transparent">
<div class="panel-body">
<div class="page-header">
{% if msg %}
<p><strong><font color="#dc143c">{{ msg }}</font></strong></p>
{% endif %}
</div>
<div class="row">
<h4>Personal Details <a href="{% url 'login:personal_details_update' %}" class="btn-success" style="background: transparent"><span class="glyphicon glyphicon-edit"></span></a></h4><br>
</div>
<form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
<div class="form-group">
<label class="control-label" for="id_username">
Username:
</label>
{{ user.username }}
</div>
<div class="form-group">
<label class="control-label" for="id_email">
Email:
</label>
{{ user.email }}
</div>
<div class="form-group">
<label class="control-label" for="id_first_name">
First Name:
</label>
{{ user.first_name }}
</div>
<div class="form-group">
<label class="control-label" for="id_last_name">
Last Name:
</label>
{{ user.last_name }}
</div>
<div class="form-group">
<label class="control-label" for="id_date_of_birth">
Date Of Birth:
</label>
{{ user.date_of_birth }}
</div>
<div class="form-group">
<label class="control-label" for="id_address">
Address:
</label>
{{ user.address }}
</div>
<div class="form-group">
<label class="control-label" for="id_city">
City:
</label>
{{ user.city }}
</div>
<div class="form-group">
<label class="control-label" for="id_state">
State:
</label>
{{ user.state }}
</div>
<div class="form-group">
<label class="control-label" for="id_country">
Country:
</label>
{{ user.country }}
</div>
<div class="form-group">
<label class="control-label" for="id_mobile">
Mobile:
</label>
{{ user.mobile }}
</div>
<div class="form-group">
<label class="control-label" for="id_avatar">
Avatar:
</label>
{{ user.avatar }}
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
## personal_details_update.html ##
{% extends 'upload/base.html' %}
{% block title %}Cloud | Personal Details Update{% endblock %}
{% block folders_active %}active{% endblock %}
{% load staticfiles %}
{% block navigation%}
<div class="container-fluid files-container">
<div class="row">
<div class="col-sm-12 col-md-4">
<div class="panel panel-default" style="background: transparent">
<div class="panel-body">
<div class="page-header">
{% if msg %}
<p><strong><font color="#dc143c">{{ msg }}</font></strong></p>
{% endif %}
</div>
<div class="row">
<h4>Personal Details Update Form</h4><br>
</div>
<form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label class="control-label" for="id_username">
Username:
</label>
{{ form.username }}
</div>
<div class="form-group">
<label class="control-label" for="id_email">
Email:
</label>
{{ form.email }}
</div>
<div class="form-group">
<label class="control-label" for="id_first_name">
First Name:
</label>
{{ form.first_name }}
</div>
<div class="form-group">
<label class="control-label" for="id_last_name">
Last Name:
</label>
{{ form.last_name }}
</div>
<div class="form-group">
<label class="control-label" for="id_address">
Address:
</label>
{{ form.address }}
</div>
<div class="form-group">
<label class="control-label" for="id_city">
City:
</label>
{{ form.city }}
</div>
<div class="form-group">
<label class="control-label" for="id_state">
State:
</label>
{{ form.state }}
</div>
<div class="form-group">
<label class="control-label" for="id_country">
Country:
</label>
{{ form.country }}
</div>
<div class="form-group">
<label class="control-label" for="id_mobile">
Mobile:
</label>
{{ form.mobile }}
</div>
<div class="form-group">
<div class="col-sm-offset-5">
<button type="submit" class="btn btn-success">Update</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
##views.py##
def个人详细信息更新(请求):
如果不是,则请求。用户。是否经过身份验证()
返回HttpResponseRedirect(“/login/”)
其他:
user=request.user
数据={
“用户名”:user.username,
“电子邮件”:user.email,
“first\u name”:user.first\u name,
“姓氏”:user.last\u name,
“地址”:user.address,
“城市”:user.city,
“状态”:user.state,
“国家”:user.country,
“移动”:user.mobile,
}
表单=个人详细信息表单(request.POST或None,初始值=数据)
如果request.method==“POST”:
如果form.is_有效():
user.username=request.POST['username']
user.email=request.POST['email']
user.first\u name=request.POST['first\u name']
user.last\u name=request.POST['last\u name']
user.address=request.POST['address']
user.city=request.POST['city']
user.state=request.POST['state']
user.country=request.POST['country']
user.mobile=request.POST['mobile']
user.save()
返回HttpResponseRedirect(“/personal_details/”)
#返回HttpResponseRedirect(“%s%”(反向('personal_details'))
上下文={
“形式”:形式,
}
返回呈现(请求“login/personal\u details\u update.html”上下文)
def个人详细信息(请求):
如果不是,则请求。用户。是否经过身份验证()
返回HttpResponseRedirect(“/login/”)
其他:
返回呈现(请求'login/personal_details.html')
##url.py##
从django.conf.url导入url
从…起导入视图
应用程序名称='登录'
URL模式=[
url(r'^$',views.home,name='home'),
url(r“^about us/$”,views.about_-us,name='about_-us'),
url(r“^services/$”,views.services,name='services'),
url(r“^registration/$”,views.registration,name='registration'),
url(r“^login/$”,views.login\u user,name='login'),
url(r'^admin/$',views.admin\u login,name='admin\u login'),
url(r“^logout/$”,views.logout\u user,name='logout'),
url(r“^personal\u details/$”,views.personal\u details,name='personal\u details'),
url(r“^personal\u details/update/$”,views.personal\u details\u update,name='personal\u details\u update'),
]
##forms.py##
来自django导入表单
从。模型导入用户
从django.contrib.admin.widgets导入AdminDateWidget
类UserForm(forms.ModelForm):
出生日期=forms.DateField(widget=AdminDateWidget)
password=forms.CharField(widget=forms.PasswordInput)
确认\u password=forms.CharField(widget=forms.PasswordInput)
类元:
模型=用户
字段=[“用户名”、“电子邮件”、“名”、“姓”、“出生日期”、“地址”、“城市”、“州”,
‘国家’、‘手机’、‘化身’、‘密码’、‘确认密码’]
类PersonalDetailsForm(forms.ModelForm):
出生日期=forms.DateField(widget=AdminDateWidget)
类元:
模型=用户
字段=[“用户名”、“电子邮件”、“名”、“姓”、“地址”、“城市”、“州”,
“国家”、“移动”]
排除=[“出生日期”、“化身”、“密码”、“确认密码”]
##personal_details.html##
{%extends'upload/base.html%}
{%block title%}Cloud |个人详细信息{%endblock%}
{%block文件夹\u active%}active{%endblock%}
{%load staticfiles%}
{%block-navigation%}
{%if msg%}
{{msg}
{%endif%}
个人详细信息
用户名:
{{user.username}
电邮:
{{user.email}
名字:
{{user.first_name}
姓氏:
{{user.last_name}
出生日期:
{{user.date}
user = request.user
user = User.objects.get(username=request.user.username)