Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django Admin中为属于方法//属性的字段重命名列标签?_Python_Django_Unicode_Admin - Fatal编程技术网

Python 如何在Django Admin中为属于方法//属性的字段重命名列标签?

Python 如何在Django Admin中为属于方法//属性的字段重命名列标签?,python,django,unicode,admin,Python,Django,Unicode,Admin,我正在尝试为auth.User模型重新定义我的管理页面。 除了一件事,一切都正常工作。检查以下代码: from django.contrib import admin from django.contrib.auth.models import User from access.models import UserProfile class UserProfileInline(admin.StackedInline): model = UserProfile class UserA

我正在尝试为
auth.User
模型重新定义我的管理页面。 除了一件事,一切都正常工作。检查以下代码:

from django.contrib import admin
from django.contrib.auth.models import User
from access.models import UserProfile


class UserProfileInline(admin.StackedInline):
    model = UserProfile

class UserAdmim(admin.ModelAdmin):
    inlines = [UserProfileInline,]
    list_display = ['id', 'username', 'get_full_name', 'email']


admin.site.unregister(User)
admin.site.register(User, UserAdmim)
如您所见,我希望在模型页面列表中显示的一个字段(由
list\u display
定义)是
get\u full\u name
。问题是管理中的列标签显示为Get full name

我的问题很简单:我可以覆盖这个吗?如果是,怎么做


感谢您的帮助。

将函数中名为
short\u description
的属性设置为模型定义中所需的标签

# note, this must be done in the class definition;
# not User.get_full_name.short_description
get_full_name.short_description = 'my label' 
或者,如果您不想使用特定于管理员的代码污染您的模型,您可以将
list\u display
设置为
ModelAdmin
上的方法,该方法使用一个参数:实例。您还必须设置
readonly\u字段
,以便管理员不会试图在您的模型中查找此字段。我在admin字段前面加上
以区分

class MyAdmin(...):
    list_display = ('_my_field',)
    readonly_fields = ('_my_field', )     

    def _my_field(self, obj):
        return obj.get_full_name()
    _my_field.short_description = 'my custom label'

更新: 请注意,这将打破默认的管理员顺序。管理员不再通过单击标签对字段进行排序。要再次启用此功能,请定义一个
admin\u order\u字段

def _date_created(self, obj):
    return obj.date_created.strftime('%m/%d/%Y')
_date_created.short_description = "Date Created"
_date_created.admin_order_field = 'date_created'

更新2: 我已经编写了一个简化这个过程的程序,因为一旦我开始使用高度描述性的详细方法名称,在函数上设置属性就会变得非常重复和混乱

def admin_method_attributes(**outer_kwargs):
    """ Wrap an admin method with passed arguments as attributes and values.
    DRY way of extremely common admin manipulation such as setting short_description, allow_tags, etc.
    """
    def method_decorator(func):
        for kw, arg in outer_kwargs.items():
            setattr(func, kw, arg)
        return func
    return method_decorator


# usage
class ModelAdmin(admin.ModelAdmin):
    @admin_method_attributes(short_description='Some Short Description', allow_tags=True)
    def my_admin_method(self, obj):
        return '''<em>obj.id</em>'''
def admin\u method\u属性(**外部参数):
“”“用传递的参数作为属性和值包装admin方法。
非常常见的管理操作的干燥方式,例如设置简短的描述、允许标记等。
"""
def method_decorator(func):
对于千瓦,在外部的arg_kwargs.items():
设置属性(函数、功率、参数)
返回函数
返回方法修饰符
#用法
类ModelAdmin(admin.ModelAdmin):
@管理方法属性(short\u description='Some short description',allow\u tags=True)
定义我的管理方法(self,obj):
返回“对象id”

对于身份验证用户模型,定义short_description属性不起作用。你能核实并编辑你的答案吗?我得到了以下错误:`AttributeError at/admin/auth/user/'instancemethod'对象没有属性'short_description'。这就是我需要检查的全部,作为正确答案=)@Francisco,请参阅我提到的“在您的模型定义中”-在您的
auth.User
情况下,您必须进入django源代码。由于这不是一个真正的选项,请使用
\u my_字段查看我的答案的第二部分
.Django 3.2,而不是
allow_标记
,您应该使用: