Programming/Python
django admin에서 ForeignKey 선택 제한
동건
2017. 2. 18. 00:56
다음과 같은 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에서도 마찬가지의 효과를 갖는다. 자세한 사항은 공식 문서를 참조하자.
굳밤
참조 링크
반응형