2014-02-14 3 views
9

나는 장고를 처음 사용하는데 몇 주 동안이 것을 시도해 왔지만이 문제를 해결할 방법을 찾지 못했습니다.초록 사용자 장고 전체 예제

사용자 휴대폰 번호, 은행 이름, 은행 계좌 같은 추가 정보를 저장하고 싶습니다. 그리고 사용자가 등록하는 동안 휴대폰 번호를 저장하고 싶고 사용자가 (휴대폰 번호와 비밀번호) 또는 (이메일과 비밀번호)로 로그인하기를 원합니다.

이 내 USERPROFILE 모델

from django.db import models 
from django.contrib.auth.models import User 
from django.contrib.auth.models import AbstractUser 
# Create your models here. 

class UserProfile(AbstractUser): 

    user_mobile = models.IntegerField(max_length=10, null=True) 
    user_bank_name=models.CharField(max_length=100,null=True) 
    user_bank_account_number=models.CharField(max_length=50, null=True) 
    user_bank_ifsc_code = models.CharField(max_length=30,null=True) 
    user_byt_balance = models.IntegerField(max_length=20, null=True) 

입니다 그리고 이것은 내가

AUTH_USER_MODEL = "registration.UserProfile" 

admin.py를 포함 한 내 settings.py에서 내 forms.py

from django import forms    
from django.contrib.auth.models import User # fill in custom user info then save it 
from django.contrib.auth.forms import UserCreationForm  
from models import UserProfile 
from django.contrib.auth import get_user_model 

class MyRegistrationForm(UserCreationForm): 
    email = forms.EmailField(required = True) 
    mobile = forms.IntegerField(required=True) 



    class Meta: 
     model = UserProfile 
     fields = ('username', 'email', 'password1', 'password2','mobile')   

    def save(self,commit = False): 
     user = super(MyRegistrationForm, self).save(commit = False) 
     user.email = self.cleaned_data['email'] 
     user.user_mobile = self.cleaned_data['mobile'] 
     user.set_password(self.cleaned_data["password1"]) 

     user_default = User.objects.create_user(self.cleaned_data['username'], 
               self.cleaned_data['email'], 
               self.cleaned_data['password1']) 
     user_default.save() 

     if commit: 
      user.save() 

     return user 

내 앱은

(210) 관리자에서 사용자를 추가하는 동안 나는

Exception at /admin/registration/userprofile/1/ 
<class 'registration.models.UserProfile'> has no ForeignKey to <class 'registration.models.UserProfile'> 

사람이 좀 도와 또는 전체 작업 exapmle로 지적 할 수이 오류를 얻을, 나는 장고 문서를 본 적이 있지만 행운을 찾지 못했습니다. 아니면 다른 방법이 있다면. 사전

에서

감사

편집 1 :

나는 또한이 오류

DatabaseError at /register 
(1146, "Table 'django_auth_db.auth_user' doesn't exist") 

답변

1

를 인라인 양식을 받고 있어요 등록 양식에서 등록하는 동안 당신이 당신의 모델에 일반 외래 키가 있다고 가정 ,이 경우 UserProfileAdmin은 존재하지 않는 UserProfile의 Generic ForeignKey를 예상합니다. 다음과 같이 일반 모델 관리자를 사용해보십시오.

class UserProfileAdmin(admin.ModelAdmin): 
    can_delete = False 
    verbose_name_plural = 'userprofile' 

admin.site.register(UserProfile, UserProfileAdmin) 
4

혼란 스러웠습니다. AbstractUser를 하위 클래스 화하고 하위 클래스로 AUTH_USER_MODEL을 정의하는 아이디어는 새 모델이 auth.models.User를 완전히 대체한다는 것입니다. 원래 사용자를 전혀 가져 오지 말아야하며 User.objects.create_user()을 호출해야합니다. 새 모델의 관리자는 이제 고유 한 create_user 메소드를 갖습니다.

이 때문에 인라인 관리자와 관련해서는 아무 이유도 없습니다. UserProfile은 기존 django.contrib.auth.admin.UserAdmin 클래스를 사용하여 관리자에 등록해야합니다.

+16

등록 양식과보기를 사용하여 Django AbstractUser의 전체 구현을 볼 수있는 링크를 제공 할 수 있습니까? 나는 2 주에서 탈출구를 찾을 수 없었다. – vaibhav1312

+0

따라 가기 : [link] (https://wsvincent.com/django-custom-user-model-tutorial/) –