inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

사용자 프로필 페이지 및 프로필 수정

AttributeError at /accounts/profile/edit/ 질문입니다!

해결된 질문

400

최다니엘

작성한 질문수 21

1

안녕하세요 강사님!

사용자 프로필 페이지 및 프로필 수정

관련하여 강의듣고 있구요

12분쯔음에 localhost:8000/accounts/profile/edit/

부분 관련하여 페이지 접속하고, 수정하는 과정 진행중인데요.

AttributeError at /accounts/profile/edit/
'User' object has no attribute 'profile'

이런 에러가 뜨네요 ㅠㅠ

Traceback에 보면


/Users/daniel_choi/Desktop/total_projects/new_instagram/accounts/views.py, line 39, in profile_edit
# FBV
@login_required
def profile_edit(request):
    try:
        # 현재 이 코드는 Profile.objects.get(user=request.user)와 같은 의미다.
        profile = request.user.profile …
    except Profile.DoesNotExist:
        profile = None
    if request.method == 'POST':
        form = ProfileForm(request.POST, request.FILES, instance=profile)
        if form.is_valid():

이렇게 나오구요.

바로 위의 코드중에서

        profile = request.user.profile 

이부분이 문제가 되는것 같습니다.

강의를 다시들으면서 체크해봐도 무엇이 잘못되었는지 잘 못찾겠어서 문의드립니다!! ㅠㅠㅠ

 


혹시 몰라서 추가로 제가 작성한 코드 중에서

중요하겠다 싶은 부분도 함께 첨부하겠습니다!

#forms.py

from django import forms
from .models import Profile


class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['address', 'zipcode']
#models.py

from django.conf import settings
from django.db import models

# Create your models here.


class Profile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    address = models.CharField(max_length=100)
    zipcode = models.CharField(max_length=6)  # validators = []
#views.py

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView, UpdateView

from .forms import ProfileForm
from .models import Profile
# Create your views here.

# FBV 방식
# @login_required
# def profile(request):
#     return render(request, 'accounts/profile.html')

# CBV 방식


class ProfileView(LoginRequiredMixin, TemplateView):
    template_name = 'accounts/profile.html'


profile = ProfileView.as_view()

# CBV
# class ProfileUpdateView(LoginRequiredMixin, UpdateView):
#     model = Profile
#     form_class = ProfileForm


# profile_edit = ProfileUpdateView.as_view()


# FBV
@login_required
def profile_edit(request):

    try:
        # 현재 이 코드는 Profile.objects.get(user=request.user)와 같은 의미다.
        profile = request.user.profile
    except Profile.DoesNotExist:
        profile = None

    if request.method == 'POST':
        form = ProfileForm(request.POST, request.FILES, instance=profile)
        if form.is_valid():
            profile = form.save(commit=False)
            profile.user = request.user
            profile.save()
            return redirect('profile')
    else:
        form = ProfileForm(instance=profile)
    return render(request, 'accounts/profile_form.html', {
        'form': form
    })

 

attributeerror docker django react python

답변 1

1

이진석

안녕하세요.

결론부터 말씀드리자면, Profile 모델에서 User 모델에 대한 외래키를 models.OneToOneField(1:1 관계)가 아니라, models.ForeignKey (1:N 관계) 로 잡으셨기 때문입니다.

models.OneToOneField로 관계를 지정한 것은
하나의 User 모델 인스턴스는 단 하나의 Profile 모델 인스턴스 만을 가지도록 설계했기 때문입니다.

Profile 모델 측에 User 모델과 1:1 관계로 설정하면,
User 인스턴스에서는 .profile 속성이 자동으로 부여됩니다. Profile 모델명을 소문자로 변경한 이름입니다.
그럼 user.profile 로 접근하면, Profile.objects.get(user=user) 를 수행한 것과 동일한 동작을 합니다. user 인스턴스 입장에서 관련 Profile 을 조회할 때 훨씬 편리하고 간결하게 조회할 수 있죠.

그런데, models.ForeignKey로 설정하시게 되면
디폴트로 User 인스턴스에 .profile_set 속성이 자동으로 부여됩니다.
이때에는 .profile_set 속성이 있을 뿐 .profile 속성은 없는 거죠. 그래서 말씀하신 AttributeError가 발생하는 것입니다.

화이팅입니다. :-)

0

최다니엘

단순히 해결 방법 뿐만 아니라, 근본적인 것 까지 알려주셔서 너무너무 감사드립니다..... ㅠㅠㅠ

안녕하세요.

0

51

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

275

1

useEffect 훅에서 else 유무에 따른 결과

0

211

1

useAxios 훅의 dependency array 설정

0

245

1

useEffect에서 변수 업데이트 관련 질문

0

382

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

268

1

bootstrap4

0

471

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

365

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

574

3

useState는 필수일까요?

0

263

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

600

4

Django allauth를 사용한 소셜 로그인 시 에러

0

655

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

556

2

useLocalStorage() 함수 사용여부

0

229

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

449

1

리듀서의 의미 재확인

0

430

1

simple-jwt Refresh Token 사용 노하우

0

899

2

docker compose 를 통한 배포 관련 오류 문의

0

673

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

365

1

is_like_user

0

233

1

related_name 오류

0

275

1

re_path 오류

0

259

1

re_path url

0

251

1

No post matches the given query

0

661

2