使用扩展的Django用户模型更新配置文件模型中的数据

时间:2019-01-16 09:03:01

标签: python django django-models django-forms

我正在尝试创建一个需要用户配置文件的项目。我扩展了django默认用户。我可以成功创建用户,但是无法将数据添加到配置文件模型中,

例如: 我已经为用户创建了一个用户'Demouser',已经成功创建了该用户,并且也可以使用创建的用户登录。但是下一步是在配置文件模型中更新有关'Demouser'的数据,为此我创建了注册视图和表格但似乎不起作用。

Forms.py文件:

class ProfileForm(forms.ModelForm):

    class Meta:
        model = profiles
        exclude=(
        'id','Username','User',
        )

Models.py:

   class profiles(models.Model):
    class Meta:
        verbose_name_plural='Profile\'s'

        Username=models.OneToOneField(
            User,
            on_delete=models.CASCADE,
            unique=True,
            related_name='profile',
        )
        first_name=models.CharField(
            max_length=25,
        )
        last_name=models.CharField(
            max_length=25,
        )
        email_id=models.EmailField()
        previous_projects=models.TextField(
            null=True,
            blank=True,
        )

Views.py:

class ProfileEditView(views.View):
    def get(self,request,*args,**kwargs):
         if request.user.is_authenticated:
            return render(request,'editprofile.html',context={'form':ProfileForm}) 

        else:
            messages.success(request,('You must Login into system for access'))
            return redirect('profiles:Login')

    def post(self,request,*args,**kwargs):
        user=User.objects.get(username=request.user.username)
        print(user)
        form=ProfileForm(request.POST,instance =user)
        if form.is_valid():
            form.save()
            messages.success(request,('Profile Edited succesfully'))
            return render(
                request,
                'editprofile.html',
                context={
                    'form':ProfileForm
                }
            )

当我使用ProfileEditView更新数据时,假设我更新了已登录用户的名字,该数据已在默认的django User模型中更新,我希望在我的个人资料模型中对其进行更新...

预先感谢

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是将您的个人资料实例并保存在那里。我想从您的发布方式中说些什么

 def post(self,request,*args,**kwargs):
        user=User.objects.get(username=request.user.username)
        print(user)
        form=ProfileForm(request.POST)
        if form.is_valid():
            // profile is valid now bring profile instance
            profile = Profile.objects.get(username=user)
            profile.first_name = form.cleaned_data['first_name']
            profile.save()
            messages.success(request,('Profile Edited succesfully'))
            return render(
                request,
                'editprofile.html',
                context={
                    'form':ProfileForm
                }
            )