[django admin] admin 페이지 커스텀

nikevapormax·2022년 12월 6일
2

TIL

목록 보기
103/116

django admin custom

  • 프로젝트를 진행하던 중 contact 모델의 admin 페이지에서 request response 모델의 admin 페이지로 넘어가는 기능을 구현하게 되었다.
  • 모델의 구조는 아래와 같다.
class Contact(BaseModel):
	...
    
class RequestResponse(BaseModel):
	contact = models.ForeignKey("contact.Contact", verbose_name="컨택", on_delete=models.CASCADE)
    ...

해결방법

from django.contrib import admin
from django.urls import reverse
from django.utils.safestring import mark_safe


@admin.register(Contact)
class ContactAdmin(admin.ModelAdmin):
    list_display = ["get_name", "project_name", "phone", "email", "created", "status_link"]
    list_display_links = ["project_name", "status_link"]
    list_filter = ["user__name", "status", "is_auto_rejected"]
    search_fields = ["user__name"]

    @admin.display(description="회사명")
    def get_name(self, obj):
        if obj.user:
            return obj.user.name

    def status_link(self, obj):
        if obj.requestresponse:
            url = reverse("admin:contact_requestresponse_change", args=[obj.requestresponse.id])
            link = '<a href="%s">%s</a>' % (url, obj.requestresponse.opinion)
            return mark_safe(link)

    status_link.short_description = "상태"

    empty_value_display = "의뢰자"
profile
https://github.com/nikevapormax

0개의 댓글