다음과 같은 models.py가 있다.
from django.contrib.auth.models import User
class Article(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=50)
content = models.TextField()
created = models.DateTimeField(auto_now_add=True)
누가 블로그 같은 것을 만들었나보다. 위 model을 토대로 django admin 도구는 user
필드를 선택 위젯으로 나타내준다. 사용자가 많아지면, 만약 만 명이라고 생각해보면, 거기서 원하는 한 명을 선택하는 것은 매우 좋지 못한 일이다. 이를 피하기 위해서 어떻게 해야 할까?
- admin 도구를 쓰지 않고 내가 관리 시스템을 직접 만든다. (꼬우면 니가 뛰던가의 자세)
- admin.py에서
raw_id_fields
속성을 주어서 직접 검색할 수 있게 한다. - models.py에서
limited_choices_to
속성을 통해 선택 범위를 확 줄여버린다.
이 글에서는 세 번째 방법을 간단히 소개한다.
models.py에서 user
필드를 아래와 같이 수정한다.
class Article(models.Model):
user = models.ForeignKey(User, limited_choices_to={'is_staff':True})
title = models.CharField(max_length=50)
content = models.TextField()
created = models.DateTimeField(auto_now_add=True)
admin 도구에 들어가서 확인해보자. staff 권한이 있는 사용자만 선택할 수 있도록 범위가 줄어들어 있음을 알 수 있다. 이 글에서는 admin 도구 위주로만 얘기했지만, limited_choices_to
는 model 필드, 그 중에서도 ForeignKey
필드에 줄 수 있는 속성이므로, django admin 뿐만 아니라 model form에서도 마찬가지의 효과를 갖는다. 자세한 사항은 공식 문서를 참조하자.
굳밤
참조 링크
반응형
'Programming > Python' 카테고리의 다른 글
왜 Python은 len 함수가 따로 있을까? Duck Typing과 Python Protocol (1) | 2018.02.12 |
---|---|
Python 계의 npm, Pipenv 첫 사용 후기 (3) | 2017.12.21 |
python json 모듈 사용시 not JSON serializable 에러를 피하는 방법 (0) | 2016.12.12 |
Python Postgresql adapter, psycopg2 설치 (Linux/Windows) (0) | 2016.11.02 |
Python virtualenv 정리 (Linux/Windows) (13) | 2016.11.01 |