我有一个编辑页面,您可以在其中编辑您注册的个人信息,例如用户名,名字,姓氏,电子邮件。但是在页面中,我还有一些额外的字段,例如描述,城市,网站字段,您可以根据需要将其添加/编辑到个人资料中。但是在我编辑个人信息并填写额外的字段进行测试后,按确认按钮,个人信息被成功编辑,并且没有错误发生。但是问题是当我在Django admin处检查数据时,UserExtraField模型为空。我希望我的解释足够好。
问题是我无法将多余的字段保存到登录的用户,但是个人信息编辑工作正常,只是多余的字段无法保存到该人。我希望用户能够编辑自己的个人资料,还可以添加/编辑其他字段。当他们编辑自己的个人资料时,我想添加一些字段,以便他们可以在自己的个人资料中包含更多信息。
下面也有图片链接。谢谢。
views.py文件
def UserProfileEdit(request):
if request.method == 'POST':
form_edit = EditForm(request.POST, instance= request.user)
form_extra = UserExtra(request.POST,instance=request.user)
if form_edit.is_valid() and form_extra.is_valid():
edit = form_edit.save()
extra = form_extra.save()
extra.user = edit
return redirect('/userprofile/user')
else:
form_edit = EditForm(instance = request.user)
form_extra = UserExtra(instance = request.user)
user_edit = {'form_edit':form_edit,'form_extra':form_extra}
return render(request,'user_profile/user_edit.html',context=user_edit)
forms.py
class EditForm(UserChangeForm):
class Meta():
model = User
fields = ('username', 'first_name', 'last_name', 'email', "password")
#make another forms for extra profile imformation
class UserExtra(forms.ModelForm):
class Meta():
model = UserExtraProfile
fields = ('description','city','website')
models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
# Create your models here.
class UserExtraProfile(models.Model):
#inherit the User model pk
user = models.OneToOneField(User, on_delete = models.CASCADE)
description = models.CharField(max_length= 250,default= '')
city = models.CharField(max_length=250,default= '')
website = models.URLField(blank= True,default= '')
# image = models.ImageField(upload_to='media/profile_pic', blank=True)
def __str__(self):
return self.user.username
def create_profile(sender,**kwargs):
if kwargs['created']:
user_profile = UserExtraProfile.objects.create(user=kwargs['instance'])
post_save.connect(create_profile, sender = User)
user_edit.html
{% extends 'base.html'%}
{% load bootstrap3 %}
{% load staticfiles %}
{% block content %}
<div class="container">
<h1>User Profile Edit</h1>
<form method="POST">
{% csrf_token %}
{% bootstrap_form form_edit %}
{% bootstrap_form form_extra %}
<input type="submit" class="btn btn-default" value="Confirm">
</form>
</div>
{% endblock %}
答案 0 :(得分:1)
分配用户后,您没有保存Extraprofile。在表单保存中使用commit=False
,这样就不会再次击中数据库。
user = form_edit.save()
extra = form_extra.save(commit=False)
extra.user = user
extra.save()
此外,您需要将个人资料而非用户传递给个人资料表单。
form_extra = UserExtra(request.POST, instance=request.user.userextraprofile)