죄송합니다 다시 질문드려요. Django의 from에 관한질문드려요.

조회수 2437회

안녕하세요. Django에 대한 질문드려요. 오류 문제는 아니고요. 회원가입 폼을 변경문제로 문의 드립니다. models에 profile이라는 클래스를 생성하고 그 안에 객체를 생성했습니다.

class profile (models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    company=models.CharField(max_length=30)
    office = models.CharField(max_length=30)
    name = models.CharField(max_length=10)

그리고 forms에 UserCreationForm을 생성하고 models에 있는 profile에 저장을 할려고하는데 그방법을 몰라서 문의드립니다.

def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        company = self.cleaned_data.get('company')
        office = self.cleaned_data.get('office')
        name = self.cleaned_data.get('name')
        profile.objects.create(
            user=user,
            company=company,
            office=office,
            name=name
        )
        if commit:
            user.save()
        return user'''

위 방법은 기본 폼은 저장이 되는데 나머지 company/office/name은 저장이 안되고요 이미지 이름이나 설명을 여기에 넣어주세요.

위에것은 profile.objects.create 부분에서 오류가 납니다 .ㅜ . ㅜ 어떻게 해야지 model에 프로필에 저장이 될까요.

  • 이전보다 보기가 좋기는 한데요... 코드는 http://hashcode.co.kr/questions/1772/마크다운-문법-작성-팁 을 참고하셔서 마크다운으로 작성해 주시면 좋겠네요. 이미지로 올리면 저걸 다 직접 쳐보기가 힘들어요. 그리고 에러가 발생할경우 에러메시지도 같이 올려주셔야 도움이 됩니다. 정토드 2016.5.3 10:44
  • 네 알겠습니다. 알 수 없는 사용자 2016.5.3 10:54
  • 수정을 하였습니다. 이 방식이 맞나요? 알 수 없는 사용자 2016.5.3 11:01
  • 편집요청 보내 두었습니다. 코드는 앞뒤로 앞 뒤 로 ```를 이용해서 블록으로 묶을 수 있습니다. '가 아니라 `(보통 키보드에 물결 표시와 같은 자판에 있습니다)입니다. 정토드 2016.5.3 11:20

2 답변

  • 원인을 찾았네요.

    def save에 보시면

    if commit:
        user.save()
    

    이런 부분이 있는데요.

    save가 실행되고 나서야 user가 db에 저장됩니다. 그래야 해당 user를 foreignkey로 이용해서 Profile에 저장할수가 있져. user.save()를 먼저하고 profile.objects.create하니 잘 됩니다.

  • from django import forms
    from django.contrib.auth.forms import UserCreationForm
    from .models import profile
    
    class RegistrationForm(UserCreationForm):
         '''생략'''
       company=forms.CharField
       office=forms.CharField
       name=forms.CharField
    
    class Meta:
            model = User
            fields = ("username", "email", "password1", "password2",'company','office','name')
    
    
    def save(self,commit=True):
            user=super(RegistrationForm,self).save(commit=False)
            company=self.cleaned_data.get('company')
            office=self.cleaned_data.get('office')
            name=self.cleaned_data.get('name')
           if commit:
                user.save()
                profile.objects.create(
                    user=user,
                    company=company,
                    office=office,
                    name=name)
            return user
    
            user.save() ...
    

    ▶ Local vars 라고 오류가 뜨네요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)