fc / apps /cases /admin /caseparty_admin.py
jun2024's picture
Upload 2241 files
b4f2238 verified
Raw History Blame Contribute Delete
1.52 kB
from __future__ import annotations
from django.contrib import admin
from django.http import HttpRequest, JsonResponse
from django.urls import URLPattern, path
from django.utils.translation import gettext_lazy as _
from apps.cases.models import CaseParty
class CasePartyAdmin(admin.ModelAdmin[CaseParty]):
list_display = ("id", "case", "client", "is_our_client", "legal_status")
list_filter = ("legal_status",)
search_fields = ("case__name", "client__name")
def is_our_client(self, obj: CaseParty) -> bool:
return bool(getattr(obj.client, "is_our_client", False))
is_our_client.boolean = True # type: ignore[attr-defined]
is_our_client.short_description = _("是否为我方当事人") # type: ignore[attr-defined]
def get_urls(self) -> list[URLPattern]:
urls: list[URLPattern] = super().get_urls()
custom: list[URLPattern] = [
path(
"is-our-client/<int:client_id>/",
self.admin_site.admin_view(self.is_our_client_view),
name="cases_caseparty_is_our_client",
),
]
return custom + urls
def is_our_client_view(self, request: HttpRequest, client_id: int) -> JsonResponse:
from apps.core.interfaces import ServiceLocator
client_service = ServiceLocator.get_client_service()
client_dto = client_service.get_client(client_id)
val = bool(client_dto.is_our_client) if client_dto else False
return JsonResponse({"is_our_client": val})