首页 > 解决方案 > 使用扩展的 django 用户模型更新配置文件模型中的数据

问题描述

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

例如:我创建了一个用户“Demouser”,用户已成功创建,我也可以使用创建的用户登录。但下一步是在配置文件模型中更新有关“Demouser”的数据,为此我创建了注册查看和形成,但似乎不起作用。

Forms.py 文件:

class ProfileForm(forms.ModelForm):

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

模型.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,
        )

视图.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 用户模型中更新,我希望它在我的配置文件模型中更新...

提前致谢

标签: pythondjangodjango-modelsdjango-forms

解决方案


一种可能的解决方案是带上您的个人资料实例并将您的个人资料保存在那里。我想从你的帖子方法中说什么

 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
                }
            )

推荐阅读