Обновление данных в модели профилей с использованием расширенной пользовательской модели django - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь создать проект, в котором мне нужны пользовательские профили. Я продлил пользователя 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 по умолчанию, я хочу, чтобы они обновлялись в моей модели профилей ...

спасибо заранее

1 Ответ

0 голосов
/ 16 января 2019

Одно из возможных решений - перенести экземпляр своего профиля и сохранить там свой профиль. Что я хочу сказать из вашего метода сообщения

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