Django, расширение модели User
Создал модель профиля, которая содержит дополнительные поля и связь "один к одному" с моделью User, но не получается их связать в контроллерах обоих приложений, ошибка атрибута:
Unresolved attribute reference 'profile' for class 'User'
Проблемные места были подписаны комментариями в коде. Помогите правильно передать объект profile из одного контроллера в другой.
signup/views.py
from django.shortcuts import render, redirect
from .forms import UserRegistrationForm
from profile.models import Profile
def register(request):
if request.method == 'POST':
user_form = UserRegistrationForm(request.POST)
if user_form.is_valid():
new_user = user_form.save(commit=False)
new_user.set_password(user_form.cleaned_data['password1'])
new_user.save()
# При регистрации создаётся профиль модели Profile связанный с моделью User, вроде как работает:
profile = Profile.objects.create(user=new_user)
return redirect('login')
else:
user_form = UserRegistrationForm()
return render(request, 'signup.html', {'user_form': user_form})
profile/views.py
from .forms import UserEditForm, ProfileEditForm
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
def index(request):
return render(request, 'profile/profile.html')
@login_required
def edit(request):
if request.method == 'POST':
user_form = UserEditForm(instance=request.user, data=request.POST)
# Ошибка атрибута вылазит здесь ниже (instance=request.user.profile)
# Unresolved attribute reference 'profile' for class 'User'
profile_form = ProfileEditForm(instance=request.user.profile, data=request.POST, files=request.FILES)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
else:
user_form = UserEditForm(instance=request.user)
profile_form = ProfileEditForm(instance=request.user)
return render(request,
'edit_profile/edit_profile.html',
{'user_form': user_form,
'profile_form': profile_form})
profile/models.py
from django.contrib.auth.models import User
from django.db import models
from django.conf import settings
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, primary_key=True)
first_name = models.CharField(max_length=150)
last_name = models.CharField(max_length=150)
city = models.CharField(max_length=150, blank=True, null=True)
date_of_birth = models.DateField(max_length=150, blank=True, null=True)
inst = models.CharField(max_length=150, blank=True, null=True)
vk = models.CharField(max_length=150, blank=True, null=True)
fb = models.CharField(max_length=150, blank=True, null=True)
def __str__(self):
return 'Profile for user {}'.format(self.user)
profile/forms.py
from django import forms
from django.contrib.auth.models import User
from .models import Profile
class UserEditForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name')
class ProfileEditForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('city', 'date_of_birth', 'inst', 'vk', 'fb')