Не могу обновить пользовательскую модель, используя пользовательскую форму в Django - PullRequest
0 голосов
/ 15 октября 2019

У меня две модели, и я хочу обновить их одновременно с помощью одной кнопки отправки. Первая модель - это Пользователь, которая основана на моделях Contribute и по умолчанию. Вторая модель - это UserProfile, который имеет OneToOneField с пользователем. Я делаю экземпляр обоих и отображаю обе формы одновременно. Когда я обновляю, один экземпляр (Пользователь) обновляется, моя пользовательская модель userprofile не обновляется. Извините, я новичок и выясняю, что не так в моем коде.

Forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import UserProfile
from django.contrib.auth.forms import UserChangeForm

class EditProfileForm(UserChangeForm): 
      class Meta:
            model = User
            fields = ('email', 'first_name', 'last_name', 'password')

class EditProfileForm2(forms.ModelForm):
    city = forms.CharField()
    description = forms.CharField()
    phone = forms.IntegerField()

      class Meta:
          model = UserProfile
            fields = ('city','description','phone')

        def save(self, commit=True):
                user = super(EditProfileForm2, self).save(commit=False)
            user.city = self.cleaned_data['city']
            user.description = self.cleaned_data['description']
            user.phone = self.cleaned_data['phone']
            if commit:
                user.save()

            return user

Views.py

from django.shortcuts import render, redirect
from .forms import RegistrationForm, EditProfileForm, EditProfileForm2
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import login, logout, authenticate
from django.contrib import messages
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserChangeForm, PasswordChangeForm
from django.contrib.auth import update_session_auth_hash

def edit_profile(request):
    if request.method == 'POST':
        form = EditProfileForm(request.POST, instance=request.user)
    if form.is_valid():
      form.save()

    form1 = EditProfileForm2(request.POST, instance=request.user)
    if form1.is_valid():
      form1.save()
      return redirect('/profile')

    else:
        form = EditProfileForm(instance=request.user)
        form1 = EditProfileForm2(instance=request.user.userprofile)
        return render(request, 'main/edit_profile.html', context={'form':form,'form1':form1})

1 Ответ

0 голосов
/ 15 октября 2019

Вы передаете пользователя, а не userprofile, в form2 в блоке POST. Должно быть:

form1 = EditProfileForm2(request.POST, instance=request.user.profile)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...