Как изменить admin_order_field и исключить класс администрирования django из функции? - PullRequest
0 голосов
/ 06 января 2020

Вместо того, чтобы повторять похожий код в каждом модуле администратора, где я хочу заменить содержимое поля гиперссылкой на страницу изменения сведений об объекте, я пытаюсь сделать для этого функцию, которую я могу вызывать из разных административные классы.

def url_to_object(obj):
  url = reverse('admin:%s_%s_change' % (obj._meta.app_label,  obj._meta.model_name),  args=[obj.pk] )
  return format_html('<a href="%s">%s</a>' % (url,  obj.__str__()))

def display_link(admin_instance, obj, field_name):
    """
    Replaces the object in the admin instance with a hyperlink to this object detail
    defines in addition the new field with the original field name,
    and enables sorting based on the original field
    """
    # print(getattr(obj, field_name))
    instance =  url_to_object(getattr(obj, field_name))
    instance.short_description = field_name
    admin_instance.exclude = [field_name,] # prevent field to be displayed
    instance.admin_order_field = field_name #'base_target_shape'
    return instance

Вызов функции из класса ModelAdmin:

def _base_target_shape(self,obj):
        return display_link(self,obj, 'base_target_shape')
    # _base_target_shape.short_description = 'base_target_shape'
    # exclude=['base_target_shape',] # prevent field to be displayed
    # _base_target_shape.admin_order_field ='base_target_shape'

Я могу создать ссылку, но инструкции exclude и admin_order_field не передаются обратно административный класс. Цель состоит в том, чтобы не повторять всегда одно и то же short_description, exclude и admin_order_field во всех административных классах

Заранее спасибо

...