저는 현재 블로깅 웹 앱을 개발 중이며 장고 사용자 프레임 워크를 일대일 필드로 확장하려고 시도했지만 모든 것이 잘 작동하지만 새 사용자를 등록하려고하면 TypeError가 발생합니다. 사용자가 생성되고 저장되고 있다는 점도 주목할 가치가 있습니다 (관리 페이지에서 확인했습니다).
profile.user = Profile.objects.get(user=request.user)
내 views.py 의이 진술이 문제를 일으킨다는 것입니다.
내 models.py :
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='profile_pics')
CHOICES = (
('AB+', 'AB+'),
('AB-', 'AB-'),
('A+', 'A+'),
('A-', 'A-'),
('B+', 'B+'),
('B-', 'B-'),
('O+', 'O+'),
('O-', 'O-'),
)
bloodgroup = models.CharField(max_length=100, choices= CHOICES)
bio = models.TextField(max_length=300)
def __str__(self):
return f'{self.user.username} Profile'
내 views.py
from django.shortcuts import render, redirect
from .models import Profile
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .forms import UserRegisterForm, ProfileForm
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
profile_form = ProfileForm(request.POST)
if form.is_valid() and profile_form.is_valid():
form.save()
profile = profile_form.save(commit=False)
profile.user = Profile.objects.get(user=request.user)
profile.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Your account has been created! You are now able to log in')
return redirect('login')
else:
form = UserRegisterForm()
profile_form = ProfileForm
return render(request, 'users/register.html', {'form': form, 'profile_form': profile_form})
@login_required
def profile(request):
return render(request, 'users/profile.html')
내 signal.py
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
당신이 쓴 두 신호는 불필요하다고 생각합니다. 또한이 줄은 다음 중 하나에서도 작동하지 않습니다.
profile.user = Profile.objects.get(user=request.user)
아직 로그인하지 않았기 때문입니다. 로그인하지 않으면 여기에서 사용자 인스턴스를 가져올 수 없습니다. 그러나 필요가 없습니다. 왜냐하면 다른 양식에서 사용자 인스턴스를 가져올 수 있기 때문입니다. 이렇게 :
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
profile_form = ProfileForm(request.POST, request.FILES)
if form.is_valid() and profile_form.is_valid():
user = form.save()
profile = profile_form.save(commit=False)
profile.user = user
profile.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Your account has been created! You are now able to log in')
return redirect('login')
else:
form = UserRegisterForm()
profile_form = ProfileForm()
return render(request, 'users/register.html', {'form': form, 'profile_form': profile_form})
또한이 두 신호를 제거해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다