无法将我的表格信息与用户链接

时间:2018-07-30 12:52:29

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

我有一个编辑页面,您可以在其中编辑您注册的个人信息,例如用户名,名字,姓氏,电子邮件。但是在页面中,我还有一些额外的字段,例如描述,城市,网站字段,您可以根据需要将其添加/编辑到个人资料中。但是在我编辑个人信息并填写额外的字段进行测试后,按确认按钮,个人信息被成功编辑,并且没有错误发生。但是问题是当我在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 %}

enter image description here

1 个答案:

答案 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)