Администратор Django: Как получить доступ к вошедшему в систему пользователю для его использования в пользовательском поле «list_display»? - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу создать гиперссылку (настраиваемое поле в display_list) и должен использовать идентификатор пользователя, вошедшего в систему, как часть параметров запроса в ссылке.

Есть ли какое-либо решение для этого?

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

для этого инструмента вы можете создать функцию и вернуть 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>

Удачи:)

0 голосов
/ 28 декабря 2018

Согласно моему Пониманию, у вас должна быть ссылка , которая требует 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'
0 голосов
/ 28 декабря 2018

Вы можете расширить метод 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]
...