我想以某种通用方法将str附加到django admin的字段(“ 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
答案 0 :(得分:0)
我想您想在多个管理员模型中使用它。这应该起作用:
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)