2013-12-21 6 views
0

프로젝트 등록 페이지를 설정하려고합니다. 내가Django에서 사용자 정의 사용자 등록

class CustomUser(models.Model): 
    middleschool = 'MS' 
    highschool = 'HS' 
    university = 'U' 
    blank = '-' 
    male = 'M' 
    female = 'F' 

    school_choices = ((middleschool, 'Middle School'), (highschool, 'High school'), (university, 'University'), (blank, 'Not defined'),) 
    sex = ((male, 'Male'), (female, 'Female'), (blank, 'Not defined'),) 

    user = models.ForeignKey(User, unique=True) 
    school = models.CharField(max_length = 30, choices = school_choices, default = blank, blank=True, null=True) 
    birthdate = models.DateField(blank=True, null=True) 
    sex = models.CharField(max_length = 1, choices = sex, default = blank, blank=True, null=True) 
    city = models.CharField(max_length = 30, blank=True, null=True) 
    payment_info = models.BigIntegerField(max_length = 30, blank=True, null=True) 
    rating = models.DecimalField(max_digits=2, decimal_places=0, default = 0) 
    premiumstatus = models.BooleanField(default = False, blank=False, null=False) 

Django 1.5Python 2.7을 사용하고 및 here을 발견로 create_user 방법을 추가 : 나는 몇 가지 옵션 필드를 추가 사용자 정의 사용자 클래스를 만들었습니다.

def registration(request): 
    if request.method == 'POST': 
     form = Registration(request.POST) 
     if form.is_valid(): 
      cd =form.cleaned_data 
      fuser = cd['username'] 
      fpassword = cd['password'] 
      femail = cd['email'] 
      fname = cd['name'] 
      fsurname = cd['surname'] 
      fschool = cd['school'] 
      fbday = cd['birthdate'] 
      fsex = cd['sex'] 
      fcity = cd['city'] 

      user = User.objects.create_user(fuser, fpassword, femail) 

      user.is_active = True 
      user.save() 
      return HttpResponseRedirect("/home/") 
    else: 
     form = Registration() 
    return render(request, "registration.html", {'form': form}) 

상대 형태 :

def create_user(sender, instance, created, **kwargs): 
    if created: 
     CustomUser.objects.create(user=instance) 
post_save.connect(create_user, sender=User) 

이 상대적이다 : 이 모델의 방법입니다 지금

class Registration(forms.Form): 
    middleschool = 'MS' 
    highschool = 'HS' 
    university = 'U' 
    blank = '-' 
    male = 'M' 
    female = 'F' 

    school_choices = ((middleschool, 'Middle School'), (highschool, 'High school'), (university, 'University'), (blank, 'Not defined'),) 
    sex = ((male, 'Male'), (female, 'Female'), (blank, 'Not defined'),) 

    username = forms.CharField(label = 'Username') 
    password = forms.CharField(label = 'Password', widget=forms.PasswordInput) 
    repassword = forms.CharField(label = ' Reinstert password', widget=forms.PasswordInput) 
    email = forms.EmailField() 
    name = forms.CharField(label = 'Name', required=False) 
    surname = forms.CharField(label = 'Surname', required=False) 
    school = forms.ChoiceField(choices = school_choices, required=False, label='What school are you enrolled?') 
    birthdate = forms.DateField(label = 'Birth date', required=False) 
    sex = forms.ChoiceField(choices = sex, required=False, label='Sex') 
    city = forms.CharField(label = 'City', required=False) 

    def clean_repassword(self): 
     repassword = self.cleaned_data['repassword'] 
     password = self.cleaned_data['password'] 
     if repassword != password: 
      raise forms.ValidationError("Verification password different from original password!") 
    widgets = { 
      'password': forms.PasswordInput(), 
    } 

이 문제는 기본적으로 두 가지 : 난 아직 초보자 그래서 내가 이해가 안돼 create_user 어떻게 작동하는지, 나는 그 방법의 인수로 fnamefsurname을 전달하려고했지만 그럴 게 4 가지 주장 만 받아 들인다는 사실을 알게됩니다. 내가 추가하려고하면 둘째, 명령 어떤 optionl 정보는 링크에 보여 주었다 :

user.get_profil().sex = fsex 

가 어떤 오류가 발생 나던하지만 중 하나가 작동하지 않습니다. .

+0

장고의 버전을 사용하고 있습니까? –

+0

죄송합니다, 편집하겠습니다. – Higure

+0

Django1.5를 사용하여 사용자 정의 사용자를 만들지 않은 이유는 무엇입니까? https : //docs.djangoproject.com/en/dev/topics/auth/customizing/#a-full-example –

답변

0

user.get_profile() 성 = fsex

당신은 그것을 수정할 수 있도록 사용자가 변수에 프로필을 할당해야

: 명시 적으로

profile = user.get_profile() 
profile.sex = fsex 
profile.save() 

업데이트 시도를 다음과 같이 사용자 생성시 필드 키를 지정하십시오.

user = User.objects.create_user(username=fuser, email=femail) 
user.set_password(fpassword) 
+0

감사합니다. 이제 문제는 이름과성에 기본 사용자의 필드를 사용하고 싶지만이 솔루션을 사용하면 작동하지 않습니다 (사용자 정의 필드에 대한 매력처럼 작동 함). 어떤 아이디어로 그것을 해결할 수 있을까요? – Higure

+0

어떤 종류의 오류가 발생합니까? 사용자 이메일, first_name 필드가 무시 되었습니까? – niekas

+0

아무런 오류도 발생시키지 않습니다. 간단히'profile.first_name = fname'은 User default filed first_name에 이름을 저장하지 않습니다. 또한 나는 이메일이'@ provider.tld'없이 저장된다는 것을 깨달았다. – Higure

관련 문제