스택큐힙리스트

Django 모델 관리자의 "list_display"가 ForeignKey 필드의 속성을 표시할 수 있습니까? 본문

카테고리 없음

Django 모델 관리자의 "list_display"가 ForeignKey 필드의 속성을 표시할 수 있습니까?

스택큐힙리스트 2023. 4. 12. 11:04
반응형

나는 Person 모델이 Book와 외래 키 관계가 있는데, author (표준 CharField)에 가장 관심이 있다.

그렇다면, 내 PersonAdmin 모델에서는 book.author를 list_display을 사용하여 표시하고 싶습니다.

class PersonAdmin(admin.ModelAdmin):

list_display = ['book.author',]

나는 그것을 하기 위한 모든 분명한 방법을 시도해 보았지만, 아무것도 작동하지 않는 것 같다.

어떤 제안이 있으신가요?

답변 1

다른 옵션으로는 다음과 같은 검색을 수행할 수 있습니다.

#models.py

class UserAdmin(admin.ModelAdmin):

list_display = (..., 'get_author')

def get_author(self, obj):

return obj.book.author

get_author.short_description = 'Author'

get_author.admin_order_field = 'book__author'

Django 3.2부터는 display() 데코레이터를 사용할 수 있습니다.

#models.py

class UserAdmin(admin.ModelAdmin):

list_display = (..., 'get_author')

@admin.display(ordering='book__author', description='Author')

def get_author(self, obj):

return obj.book.author

답변 2

Django의 ModelAdmin에서 list_display를 사용하여 ForeignKey 필드의 속성을 표시할 수 있을까요?

Django는 웹 어플리케이션을 개발하기 위한 프레임워크로, 개발자들이 간편하고 빠르게 웹 어플리케이션을 만들 수 있도록 돕습니다. 이러한 Django 프레임워크에서는 ModelAdmin을 사용하여 관리자 페이지를 만들 수 있습니다. ModelAdmin에서는 list_display를 사용하여 모델의 필드를 정의할 수 있습니다. 하지만 이 list_display에서 ForeignKey 필드의 속성을 표시할 수 있는지에 대해 궁금증이 있는 개발자들이 있습니다.

ForeignKey 필드란 다른 모델과의 관계를 나타내는 필드로, 다른 모델의 Primary Key를 참조합니다. ForeignKey 필드에서는 선택한 모델의 속성을 가져올 수 있습니다. 따라서 list_display에서 ForeignKey 필드의 속성을 표시하는 것은 가능합니다. 하지만 이 때 ForeignKey 필드에 속한 속성 중 어떤 것을 표시할 것인지에 대한 명시적인 정의가 필요합니다.

간단한 예시를 통해 설명해보겠습니다. 만약 Post 모델에서 Category 모델과의 관계를 나타내는 ForeignKey 필드를 가진다고 가정해보겠습니다. Category 모델에서는 name이라는 속성을 가지고 있다고 가정해보겠습니다. 이때 list_display에서 Post 모델의 category 필드를 정의하고 싶다면 list_display = ['category', 'category__name']와 같이 정의할 수 있습니다. 이렇게 하면 Post 모델의 category 필드와 함께 Category 모델의 name 속성도 함께 표시됩니다.

결론적으로, Django의 ModelAdmin에서 list_display를 사용하여 ForeignKey 필드의 속성을 표시할 수 있습니다. 다만, 이때 ForeignKey 필드에 속한 속성 중 어떤 것을 표시할 것인지에 대한 명시적인 정의가 필요하며, 이를 정의하여 사용해야 합니다. 따라서 Django 개발자들은 이를 활용하여 보다 효율적인 웹 어플리케이션을 개발할 수 있습니다.

반응형
Comments