Получить входные данные от пользователя в профиль модели Django - PullRequest
0 голосов
/ 17 октября 2018

У меня есть регистрационная форма, которая является расширением UserCreationForm, и у меня есть UserProfileForm.Я передаю обе формы в тот же HTML во время регистрации пользователя.

Проблема в том, что входные данные сохраняются в встроенной модели пользователей, а не в модели профиля.В модели профиля не отображаются данные.

Я пробовал много способов и искал много решений, но не смог найти ошибку.

Мой файл forms.py выглядит так -

class RegistrationForm(UserCreationForm):

      email = forms.EmailField(required=True)
      first_name = forms.CharField(required=True)
      last_name = forms.CharField(required=True)
      username = forms.CharField(required=True)

      class Meta:
         model = User
         fields = ['username',
                  'first_name',
                   'last_name',
                   'email',
                   'password1',
                   'password2'
                  ]

       def save(self,commit):
            user = super(RegistrationForm,self).save(commit=False)

       if commit:
           user.save()

       return user


class UserProfileForm(forms.ModelForm):

    class Meta:
        model = UserProfile
        exclude = ['user']

    def save(self,commit):
         user = super(RegistrationForm,self).save(commit=False)
         USN =self.cleaned_data['USN']
         year = self.cleaned_data['year'] 
         sem = super(RegistrationForm,self).save(commit=False)

         if commit:
            user.save()

         return user

Создана модель UserProfile в models.py

class UserProfile(models.Model):

    alphanumeric = RegexValidator(r'^[0-9A-Z]*$', 'Only alphanumeric 
                                  characters are allowed.')
    user = models.OneToOneField(User, related_name = 
                                'profile',on_delete=models.CASCADE)
    USN = models.CharField(max_length=50, blank=True, null=True, validators= 
                          [alphanumeric])
    year = models.IntegerField(default=0)
    sem = models.IntegerField(default=0)

    def __str__(self):
         return self.user.username

 def create_profile(sender, **kwargs):
   if kwargs['created']:
       objects=models.Manager()
       user_profile = UserProfile.objects.create(user=kwargs['instance'])
 post_save.connect(create_profile, sender = User)

Я использовал обе формы в Views.py -

def register(request):
if request.method == 'POST':
    form_1 = RegistrationForm(request.POST)
    form_2 = UserProfileForm(request.POST)
    if form_1.is_valid() and form_2.is_valid():
        save_1 = form_1.save(commit = False)
        save_2 = form_1.save(commit = False)
        save_1.save()
        save_2.save()
        return render(request,'main/home.html')
else:
    form_1 = RegistrationForm()
    form_2 = UserProfileForm()
args = {'form_1':form_1,'form_2':form_2}
return render(request, 'account/register.html',args)

Имя пользователя в объекте модели профиля показываетправильно, но другие поля не обновляются.Я хочу, чтобы другие поля также обновлялись в объекте профиля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...