2017-02-27 1 views
1

수퍼 유저와 일반 사용자가 모두 django의 User 객체라는 것을 알고 있지만 일반 사용자 용 필드가 필요하고 수퍼 유저에게는 해당 필드가 필요없는 사용자 정의 사용자 클래스를 작성하려면 어떻게해야합니까?장고에서는 슈퍼 유저가 슈퍼 유저가 아닌 다른 필수 필드를 가질 수 있습니까?

+0

[Django 동적 모델 필드] (http://stackoverflow.com/questions/7933596/django-dynamic-model-fields)의 가능한 복제본 –

답변

0

데이터베이스에 구조가 복잡하지 않습니다. 예를 들어 JSONFields는 앱이 성장할 때 길들이기가 극히 어려울 수 있습니다.

나는 그것을 "단순하게"만들려고 노력했다. - 더 정비 가능하다. (나는 당신이 미래에 모델을 확장하기를 원할지도 모르는 것들을해야한다고 상상한다.) 이것이 새로운 프로젝트라면 쉽게 change the default user model 수 있습니다. 그러나 그것은 당신의 경우에 도움이 될 수도 있고 그렇지 않을 수도 있습니다.

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

class Mortal(AbstractBaseUser): 
    is_superuser = False 

    username = models.CharField(max_length=256) 
    first_name = models.CharField(max_length=256) 
    last_name = models.CharField(max_length=256) 

class Admin(AbstractBaseUser): 
    is_superuser = True 

    username = models.CharField(max_length=256) 

다음 make your own authentication backend :

class MyBackend(object): 
    """ 
    Danger! A backend to authenticate only via username 
    """ 

    def authenticate(self, username=None): 
     try: 
      return Mortal.objects.get(username=username) 
     except Mortal.DoesNotExist: 
      try: 
       return Admin.objects.get(username=username) 
      except Admin.DoesNotExist: 
       return None 
1

당신이 작성 될 사용자에게 외래 키와 프로필 클래스 (예를 들어 사용자 프로필)을 가질 수

당신은 항상 두 가지 모델을 만들 수 있습니다 사용자가 웹 사이트의 등록 양식을 사용하여 가입하는 경우에만 이렇게하면 관리 사이트 또는 명령 줄을 통해 작성된 수퍼 유저에게는 추가 프로필 인스턴스가 필요하지 않습니다.

관련 문제