다음과 같은 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 필드를 선택 위젯으로 나타내준다. 사용자가 많아지면, 만약 만 명이라고 생각해보면, 거기서 원하는 한 명을 선택하는 것은 매우 좋지 못한 일이다. 이를 피하기 위해서 어떻게 해야 할까?

  1. admin 도구를 쓰지 않고 내가 관리 시스템을 직접 만든다. (꼬우면 니가 뛰던가의 자세)
  2. admin.py에서 raw_id_fields 속성을 주어서 직접 검색할 수 있게 한다.
  3. 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에서도 마찬가지의 효과를 갖는다. 자세한 사항은 공식 문서를 참조하자.

굳밤


참조 링크

django 공식 문서