장고 관리자에게 str을 필드 ( 'fields', 'readonly_fileds')에 추가하는 일반적인 방법을 갖고 싶습니다. 이상적인 방법은 Mixin 또는 데코레이터입니까? 몇 가지 방법을 시도했을 때 재귀 또는 오류가 발생했습니다.
내가 시도한 두 가지 방법이 있습니다.
from django.contrib import admin
# Register your models here.
class DistributedAdminMixin():
pass
def __init__(self, *args, **kwargs):
super(DistributedAdminMixin, self).__init__(*args, **kwargs)
import pdb
pdb.set_trace()
readonly_fields = self.readonly_fields.copy()
readonly_fields.extend(['id_to_str'])
self.readonly_fields = readonly_fields
def get_form(self, request, obj=None, **kwargs):
import pdb
pdb.set_trace()
print(1)
if 'fields' in kwargs:
fields = kwargs.get('fields') + ('id_to_str', )
else:
fields = self.flatten_fieldsets(self.get_fieldsets(request, obj))
super(DistributedAdminMixin, self).get_form(self, request, obj, **kwargs)
def get_fields(self, request, obj=None):
fields = super(DistributedAdminMixin, self).get_fields(request, obj)
fields.append('id_to_str')
readonly_fields = super(DistributedAdminMixin, self).get_readonly_fields(request, obj)
# super(DistributedAdminMixin, self).readonly_fields = readonly_fields.append('id_to_str')
# return fields
def distributed_admin(wrapped):
class WrappedClass(wrapped):
def get_fields(self, request, obj=None):
fields = WrappedClass.get_fields(request, obj)
fields.append('id_to_str')
return fields
return WrappedClass
여러 관리자 모델에서 이것을 사용하고 싶을 것 같습니다. 이것은 작동합니다.
class ExtraFieldMixin:
def get_fields(self, request, obj=None):
fields = list(super(ExtraFieldMixin, self).get_fields(request, obj))
return fields + ['extra_field']
와 동일 readonly_fields
하지만 get_readonly_fields
메서드 를 재정의해야합니다 .
django 모델이나라는 관리자 모델에 속성이나 메서드가 필요하다는 것을 기억하십시오 extra_field
. Mixin에서도 사용할 수 있습니다.
class ExtraFieldMixin:
# Previous code
def extra_field(self, obj):
return str(obj.id)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다