2014-01-12 3 views
0

내가 이런 django.contrib.auth.models에서 Users를 구현하기 위해 노력하고있어 : 사용자 이름, 암호django 사용자 모델을 확장하는 방법은 무엇입니까?

screenshoot

the code I에서 읽기 :

from django.db import models 
from django.contrib.auth.models import User 


class Registration(models.Model): 
    '''Represents a user registration.''' 
    user    = models.ForeignKey(User) 
    registration_date = models.DateTimeField(auto_now_add=True, help_text='The date of the registration') 

    def __str__(self): 
     return '%s - %s' % (self.user, self.registration_date,) 

이 사용하는 두 가지 속성은 기본적으로 활성화 이름이나 이메일과 같은 속성이 더 있음을 알 수 있습니다.

어떻게 할 수 있습니까 (이것이 맞으면) 속성입니까?

답변

5

먼저 이러한 특성은 숨겨지지 않습니다. INSTALLED_APPS에 "django.contrib.auth"및 "django.contrib.contenttypes"가 있다고 가정하면 링크에 정의 된대로 User 모델에 액세스 할 수 있습니다. 사용/액세스 방법에 대한 설명은 here을 참조하십시오. 당신이 User 모델을 확장 을 지정 이후

그러나, 나는 당신이 (당신의 예를 registration_date이 존재하고 myuser.date_joined를 통해 액세스 할 수 있더라도) 그것에 자신의 일부 필드를 추가하고 싶었 기대합니다.


나이가 많고 안정적이며 일반적인 방식으로 사용하는 것과 비슷합니다. 유일한 차이점은 ForeignKey(User) 대신 OneToOneField(User)을 사용하는 것입니다. 이것은 관계를 양방향으로 만들고 더욱 편리하게 만들어줍니다. User을 만들 때마다 Registration 개체를 만들고 만들어야합니다.

실제로 정확히 원한다면 OneToOneField에 대한 문서에서 원하는 내용이 an example입니다.


from django.db import models 
from django.contrib.auth.models import User 

class Registration(models.Model): 
    user = models.OneToOneField(User) 
    registration_date = models.DateTimeField(auto_now_add=True) 

>>> user = User.objects.get(pk=1) 
>>> registration = Registration.objects.create(user=user) 
>>> user.registration.registration_date 
# Should give the current time 
>>> user.get_full_name() 
# Should also have all those *hidden* attributes linked above 

장고 1.5으로, 당신은 매우 쉽게 사용자 정의 사용자 모델을 사용할 수 있습니다. 이 기능에 대한 설명서는 here입니다. 추가 필드를 추가하는 중이면 사용자 모델을 서브 클래스로 만들고 사용자 고유의 필드를 추가 할 수 있습니다.

그런 다음 AUTH_USER_MODEL = 'myapp.MyUser'을 추가하여 settings.py에서 사용하도록 설정하십시오. 이제 우리는 문서에 extendingsubstituting에서 사용자 모델을 약간 다르게

>>> from django.contrib.auth import get_user_model() 
>>> Users = get_user_model() 
>>> user = Users.objects.get(pk=1) 
>>> user.registration_date 
# Should give the current time 
>>> user.get_full_name() 
# Should have those 'hidden' attributes 

이 모든

를 사용할 수있는 사용자 모델에 액세스 할 수 있습니다.

+0

그러나 * 새 사용자 추가 양식에서 해당 속성을 누가 입력 할 수 있습니까? 예를 들어 내 스크린 샷에서 사용자 이름과 비밀번호 만 입력 할 수 있음을 알 수 있지만 이름, 이메일 및 기타도 사용하고 싶습니다. 이 속성은 기본 모델에 있으므로 덮어 쓰지 않으려 고합니다. – Lucio

+0

@ 루시오 나는 궁금한 점은 장고 관리 양식을 확장하는 것에 관한 질문이다. 하단의 전체 예제 (여기 [https://docs.djangoproject.com/en/1])를보십시오.6/topics/auth/customizing/# extend-user), 특히 "앱의 admin.py 파일에 다음 코드가 필요할 것"이라고 말한 경우. 나는 그것을 시험 할 시간이있을 때 나의 포스트를 새롭게 할 것이다. – kalhartt

관련 문제