【发布时间】:2019-01-06 17:31:59
【问题描述】:
我有一个编辑页面,您可以在其中编辑您注册的个人信息,例如用户名、名字、姓氏、电子邮件。但是在页面内我有一些额外的字段,例如描述,城市,网站字段,如果您愿意,您可以将其添加/编辑到您的个人资料中。但是在我编辑个人信息并填写额外字段以进行测试并按确认后按钮,个人信息编辑成功,没有出现错误。但问题是当我在 Django 管理员检查数据时,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 %}
【问题讨论】:
-
也许我在描述中遗漏了它,但出了什么问题?你有错误吗?数据库条目是否没有正确关联?还是别的什么?
-
不要使用两个单独的表格。为额外字段创建一个新表单或使 UserExtra 扩展 EditForm。
-
@wholevinski ,我在第一段中添加了一些解释。希望足够清楚。
标签: python django django-models django-forms django-views