2012-06-25 4 views
0

사용자 모델을 확장하기 위해 사용자에게 OneToOne 관계가있는 클라이언트 모델이 있습니다. 사용자 (사용자 필드와 클라이언트 필드를 모두 포함하는 양식)를 등록 할 수 있어야하며 장고 등록을 사용했습니다. RegistrationForm 구현하지 않기 때문에,Django 등록 : 사용자 서식을 저장하는 것이 왜 어려운가요? 내 간단한 해결책은 괜찮습니까?

from registration.forms import RegistrationForm 

class UserForm(RegistrationForm): 
    def save(self): 
     new_user = User.objects.create_user(
      username=self.cleaned_data['username'], 
      email = self.cleaned_data['email'], 
      password=self.cleaned_data['password1']) 
     new_user.backend='django.contrib.auth.backends.ModelBackend' 
     new_user.save() 
     return new_user 

class ClientForm(forms.ModelForm): 
    class Meta: 
     model = Client 
     exclude = ['user'] 

내가 정의 폼에 대한 저장() 메소드를 구현 : 여기

def register_client(request): 
    if request.method == 'POST': 
     userform = UserForm(request.POST, prefix='user') 
     clientform = ClientForm(request.POST, prefix='client') 
     if userform.is_valid() and clientform.is_valid(): 
      user = userform.save() 
      client = clientform.save(commit=False) 
      client.user = user 
      client.save() 
      login(request, user) 
      return HttpResponseRedirect('/webapp/') 
     else: 
      return HttpResponse('error!') 

    else: 
     userform = UserForm(prefix='user') 
     clientform = ClientForm(prefix='client') 

    t = loader.get_template('register.html') 
    c = RequestContext(request, { 
     'userform':userform, 
     'clientform':clientform, 
    }) 
    return HttpResponse(t.render(c)) 

그리고 내 양식됩니다 여기에 내가 발견 된 일부 조각에 따라 등록을위한 뷰입니다 하나는 전형적인 형태와 같습니다.

양식을 저장하기 위해 일부 백엔드 구현에 어려움을 겪어야하는 이유는 무엇입니까? 간단한 방법으로 문제가 있습니까? 그것은 효과가있다.

왜 당신은 사용자 모델을 저장해야합니까

답변

0

귀하의 질문에 답변하는 방법을 모르겠습니다. 코드가 작동하면 문제가 발생하지 않습니다. 하지만 zaphod가 말했듯이, django-registration은 사용자를 저장하고 활성화시킵니다. 사용자에게 여분의 데이터를 추가하려면 zaphod와 같은 django-profiles을 사용하십시오.

나 자신은 django-userena을 사용합니다. 그것은 장고 등록과 장고 프로파일과 같은 것입니다.

+0

감사합니다. 지금 당장은 내 솔루션을 사용하게 될 것입니다. 클라이언트 필드가 장부 등록을 사용하여 쉽게 등록 양식을 얻지 못했기 때문입니다. 프로필의 문제는 사용자에게 적어도 2 개의 다른 프로필이 필요하다는 것입니다. – jpimentel

0

을 (나는 또한 new_user.backend='django.contrib.auth.backends.ModelBackend' 그래서 난 후 등록. 자동으로 사용자를 로그인 할 수 추가)? 당신이 다른 기능을 필요로하지 않는다면 django-registration은 그것을 대신 해줍니다. 사용자 당 몇 가지 추가 정보를 저장하려면 User profiles을 사용하는 것이 좋습니다.