pseong

장고 어드민 페이지 list display에서 foreign의 속성 명시하기 본문

백엔드/장고

장고 어드민 페이지 list display에서 foreign의 속성 명시하기

pseong 2022. 1. 7. 15:34

장고 어드민 페이지에서 유저 테이블이 있고, 유저 목표 테이블(외래키로 유저 테이블)이 있는데,

유저 목표 테이블에서 유저 테이블의 유저의 이름과 UUID를 불러오고 싶었다.

여러 가지 검색도 해보고 몇 가지 방법을 시도해 본 결과 가장 좋은 방법을 찾았다.

@admin.register(UserGoal)
class UserGoalAdmin(admin.ModelAdmin):
    def get_uuid(self, obj):
        return obj.user.id
    get_uuid.short_description = 'UUID'
    
    list_display = ('get_uuid')

이런 식으로 사용을 하면 외래키로 존재하는 유저의 속성을 받아올 수 있다.

 

이전에 사용했던 방법으로는

class User(AbstractUser):
    def __str__(self):
        return str(self.uuid)

이런 식으로 하고 list_display = ('user') 그 속성을 지정해주면 __str__함수에서 반환되는 값이 지정된다.

이렇게 하면 몇 가지 문제가 발생하는데 일단 다른 속성 값도 받아오고 싶으면

class User(AbstractUser):
    def __str__(self):
        return str(self.uuid) + ' ' + str(self.name)

이렇게 받아와야 하는데 어드민 페이지에서 보기가 안 좋아지고 가독성도 낮아진다.

 

따라서 위의 방법을 추천한다.

 

참고로 외래키의 속성도 어드민 페이지에서 검색하고 싶다면

search_fields = ('user__uuid', 'user__name')

이런 식으로 (속성)__(속성 테이블의 속성) 이렇게 하면 검색 필드에 오류 없이 추가가 된다.

※ list_display 에서는 이런 방법이 안 먹히니 아까 말했던 방법대로 해야한다.

'백엔드 > 장고' 카테고리의 다른 글

[django] pip mysqlclient 에러 해결 방법  (0) 2022.08.12
Comments