我想创建一个超链接(display_list中的自定义字段),并且必须使用登录用户的ID作为链接中查询参数的一部分。
对此有什么解决办法吗?
答案 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'