내 응용 프로그램에서 장고 등록을 사용하고 있습니다. 다른 프로필을 가진 여러 종류의 사용자를 만들고 싶습니다. 예를 들어 한 사용자는 선생이고 다른 사용자는 학생입니다.장고 등록 및 여러 프로필
어떻게하면 user_type을 설정하고 올바른 프로필을 만들 수 있습니까?
내 응용 프로그램에서 장고 등록을 사용하고 있습니다. 다른 프로필을 가진 여러 종류의 사용자를 만들고 싶습니다. 예를 들어 한 사용자는 선생이고 다른 사용자는 학생입니다.장고 등록 및 여러 프로필
어떻게하면 user_type을 설정하고 올바른 프로필을 만들 수 있습니까?
긴 대답 : P 나는 그것이 장고 - 프로파일과 장고 등록 시스템의 다양한 기능을 설명으로 이런 종류의 문제에 대한 The Missing Manual 후 귀중한를 발견했습니다
.
난 당신이
#models.py
class Profile(models.Model):
#add any common fields here (first_name, last_name and email come from User)
#perhaps add is_student or is_teacher properites here
@property
def is_student(self):
try:
self.student
return True
except Student.DoesNotExist:
return False
class Teacher(Profile):
#teacher fields
class Student(Profile):
#student fields
장고 등록은 등록를 알리는 신호를 사용하는 예를 들어 AUTH_PROFILE_MODULE
를 통해 설정할 수있는 단일 프로필에 multi table inheritance을 사용하는 것이 좋습니다 것입니다. 이 시점에서 프로파일을 작성해야 user.get_profile()에 대한 호출이 항상 프로파일을 리턴한다고 확신 할 수 있습니다. 사용되는 신호 코드는 당신이 만든 요청에 대한 액세스 권한이 그 신호를 처리 할 때 의미
#registration.signals.py
user_registered = Signal(providing_args=["user", "request"])
입니다. 따라서 POST 할 때 등록 양식에는 작성할 사용자 유형을 식별하는 필드가 있습니다. 당신이 만든 모델에 아무것도를 추가하려면
#signals.py (in your project)
user_registered.connect(create_profile)
def create_profile(sender, instance, request, **kwargs):
from myapp.models import Profile, Teacher, Student
try:
user_type = request.POST['usertype'].lower()
if user_type == "teacher": #user .lower for case insensitive comparison
Teacher(user = instance).save()
elif user_type == "student":
Student(user = instance).save()
else:
Profile(user = instance).save() #Default create - might want to raise error instead
except KeyError:
Profile(user = instance).save() #Default create just a profile
, 그는 당신은 분명 요청에서 해당 당겨 수 있습니다 등록시, 기본 필드 값이 적용되지 않습니다.
http://docs.djangoproject.com/en/1.2/topics/auth/#groups
장고 그룹은 당신이 찾고있는 무엇을 정의 할 수있는 좋은 방법입니다. 교사 및 학생의 모든 속성을 포함하는 하나의 User extended profile을 가질 수 있습니다.
class MasterProfile(models.Model):
user = models.ForeignKey(User, unique=True)
# add all the fields here
그런 다음 그룹을 정의 teacher
및 student
및 각 MasterProfile 교사 또는 학생 중 하나에 연결합니다.
장고 그룹 테이블은 다양한 역할을 정의하고 그룹에 사용자를 올바르게 할당하는 데 도움을줍니다.
하지만 어떻게 이런 식으로 필드를 구별합니까?선생님들과 학생들이 같은 분야를 갖게 될 것입니다. 맞습니까? 일반적으로 각 사용자 유형마다 다른 필드를 가지려면 여러 프로필 유형이 필요합니다. – Leonardo
나는 똑같은 문제가있어서 Chris가 제안한 대답을 시도했지만 나에게 도움이되지 못했습니다.
나는 장고 만 초보자 해요,하지만 난 핸들러 create_profile
취한 인수 신호 user_registered
에 의해 providing_args
에서 일치한다고 생각하고, 크리스의 대답에 그들은 (나는 그들이 아마 신호 post_save
통과 일치 생각하지 않는다 나는이 누락 매뉴얼에 사용되는 본 적이있는 그는 내가 인수 일치하게 자신의 코드를 수정
)을 인용한다 :
def create_profile(sender, **kwargs):
"""When user is registered also create a matching profile."""
request, instance = kwargs['request'], kwargs['user']
# parse request form to see whether profile is student or teacher
try:
user_type = request.POST['usertype'].lower()
print(user_type)
if user_type == "teacher": #user .lower for case insensitive comparison
Teacher(user = instance).save()
elif user_type == "student":
Student(user = instance).save()
else:
Userprofile(user = instance).save() #Default create - might want to raise error instead
except KeyError:
Userprofile(user = instance).save() #Default create just a profile
그리고 당신이 일반이 지금
을 작동하는 것 같군 거기에 : P – jonasespelita