Django 프로젝트 에서 User 데이터 모델 사용 하기
4117 단어 django
User 클래스 를 가 져 오 는 가장 좋 은 방법:
# Stock user model definition
>>> from django.contrib.auth import get_user_model
>>> get_user_model()
# When the project has a custom user model definition
>>> from django.contrib.auth import get_user_model
>>> get_user_model()
데이터 모델 에서 settings.AUTH 사용USER_MODEL 외부 키 참조 진행
User 의 ForeignKey,OneToOneKey 또는 ManyToMany Field 에 대한 인용 방식:
from django.conf import settings
from django.db import models
class IceCreamStore(models.Model):
owner = models.OneToOneField(settings.AUTH_USER_MODEL)
title = models.CharField(max_length=255)
setting.AUTH_USER_MODEL 의 값 이 설정 되면 더 이상 수정 하지 마 십시오.수정 은 데이터베이스 모델 의 대량 수정 과 관련 됩 니 다!
User 의 외부 키 참조 에 get 을 사용 할 수 없습니다.user_model(),순환 을 일 으 킬 수 있 습 니 다.
다음은 잘못된 사용 방법 입 니 다.
# DON'T DO THIS!
from django.db import models
from django.contrib.auth import get_user_model
class IceCreamStore(models.Model):
# This following line tends to create import loops.
owner = models.OneToOneField(get_user_model())
title = models.CharField(max_length=255)
1.5-버 전의 User 데이터 모델 에서 1.5+버 전 으로 이전
참고:Tobias McNulty’s Tutorial와django-authtool’s Tutorial
Django 1.8 에서 사용자 정의 사용자 항목
관련 패키지:django.authtools,AbstractEmailUser 와 AbstractNamedUser 데이터 모델 이 있 습 니 다.
방식 1:추상 사용자 계승
추가 데이터 항목 만 추가 하면 이 방식 을 선택 하 십시오.이러한 상황 에서 django-authtools 의 본 데이터 모델,폼 과 admin 대상 을 사용 하 는 것 이 가장 빠 르 고 쉬 운 실현 방식 이 며,대부분의 항목 은 이러한 상황 에 부합된다.
예시:
# profiles/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import ugettext_lazy as _
class KarmaUser(AbstractUser):
karma = models.PositiveIntegerField(verbose_name=_("karma"),
default=0,
blank=True)
다음 설정 파일 에서 설정 합 니 다:
AUTH_USER_MODEL = "profiles.KarmaUser"
방식 2:추상 베이스 사용자 계승
AbstractBaseUser 는 기본 골격 으로 3 개 항목 만 있 습 니 다:password,lastlogin, is_active。다음 과 같은 경우 이 방식 을 선택 하 십시오.
1.5 버 전 전에 Profile 데이터 모델 을 만 드 는 방식 과 유사 합 니 다.그것 은 다음 과 같은 몇 가지 사용 상황 이 있다.
상황 1:제3자 가방 만 들 기
상황 2:내부 프로젝트 수요
# profiles/models.py
from django.conf import settings
from django.db import models
from flavors.models import Flavor
class EaterProfile(models.Model):
# Default user profile
# If you do this you need to either have a post_save signal or
# redirect to a profile_edit view on initial login.
user = models.OneToOneField(settings.AUTH_USER_MODEL)
favorite_ice_cream = models.ForeignKey(Flavor, null=True, blank=True)
class ScooperProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
scoops_scooped = models.IntegerField(default=0)
class InventorProfile(models.Model)
user = models.OneToOneField(settings.AUTH_USER_MODEL) .
flavors_invented = models.ManyToManyField(Flavor, null=True, blank=True)
그 후에 ORM 을 통 해 방문 할 수 있 습 니 다.예 를 들 어
user.eaterprofile.favorite_ice_cream
.주:
user.get_profile()
Django 1.7 에서 제거 되 었 습 니 다.참고 문헌:
Two Scoops of Django: Best Practices for Django 1.8
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.