아래와 같은 모델과 어드민을 정의했다고 하자.

class Notification(models.Model):
    title = models.CharField(
        '제목',
        max_length=200,
    )
    content = models.TextField(
        '내용',
    )
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )

@admin.register(Notification)
class NotificationAdmin(admin.ModelAdmin):
    list_display = (
        'id', 'title', 'user',
    )

Django Model Admin은 외래키 필드에 대한 보기를 제공한다.

어드민을 통해 Notification 모델을 생성하자고 하자. user를 선택하는 UI는 아래와 같은 select box로 주어진다.

Untitled

이때 참조하는 모델(User)의 인스턴스가 많은 경우, 서버에 무리가 간다.

따라서 모든 인스턴스를 가져오는 select box가 아닌, 다른 방식으로 외래키 필드를 가져와야 한다.

@admin.register(Notification)
class NotificationAdmin(admin.ModelAdmin):
    list_display = (
        'id', 'title', 'user',
    )
    raw_id_fields = (
        'user',
    )

위처럼 어드민 클래스에 raw_id_fields 클래스 변수를 선언하여 이를 해결한다.

이를 적용하면 한 번에 모든 참조 모델 인스턴스를 불러오지 않게 되어 서버에 부하가 적어진다.

Untitled

(사진 출처: https://darrengwon.tistory.com/356)