Django Admin:如何在自定义“ list_display”字段中访问登录用户以使用它?

时间:2018-12-28 07:25:42

标签: django django-admin

我想创建一个超链接(display_list中的自定义字段),并且必须使用登录用户的ID作为链接中查询参数的一部分。

对此有什么解决办法吗?

3 个答案:

答案 0 :(得分:1)

您可以扩展模型管理员的get_list_display方法以访问request对象,并且可以在该方法中添加自定义方法以访问请求对象。

from django.utils.html import format_html

Class FooAdmin(admin.ModelAdmin):
   def get_list_display(self, request):
        def custom_url_method(obj):
            user = request.user
            return format_html("<a href='http://url.com/{0}'>link</a>", user.pk)

        return ['model_field_1', 'model_field_2', custom_url_method]

答案 1 :(得分:1)

对于此工具,您可以创建函数并将html文件返回到管理面板,然后将内容传递给html,而不是使用render_to_string

在管理面板中进行渲染。

例如:

在您的admin.py中:

from django.contrib import admin
from django.template.loader import render_to_string
from .models import CustomModel

class CustomAdmin(admin.ModelAdmin):

    list_display = ('model_field 1', 'custom_link', 'model_field 2',)

    def custom_link(self, object):
        return render_to_string('custom.html', {'content':'content'})
    custom_link.allow_tags = True

admin.site.register(CustomModel, CustomAdmin)

template/custom.html中:

<a href="{% url 'app:view' request.user.id %}">custom link {{content}}</a>

<a href="/app/view/{{request.user.id}}/">custom link {{content}}</a>

祝你好运:)

答案 2 :(得分:0)

根据我的理解,您需要有一个链接,该链接需要user.id才能根据您的要求将您送至某个地方。在我的代码中,我导航到user中该特定用户的admin详细信息页面。

Admin.py

class CustomAdmin(admin.ModelAdmin):
list_display = ['field1', 'field2', 'anotherfield', 'link_to_user']


def link_to_user(self, obj):

    link = reverse("admin:auth_user_change", args=[obj.model_name.user.id])

    return format_html('<a href="{}"> {}</a>', link, obj.model_name.user.id)

link_to_user.short_description = 'UserID'