About HtttpRequest in Admin Display Functions
Django admin display methods, by default, have no access to the current request, which is necessary to access its properties, context processors, or objects created by middlewares. However, you can set access to the request using this trick:
# posts/admin.py
from django.contrib import admin
from .models import Post
@admin.register(Post):
class PostAdmin(admin.ModelAdmin):
list_display = ["title", "get_content_html"]
def get_queryset(self, request):
self.request = request
return super().get_queryset(request)
@admin.display(description="Content")
def get_content_html(self, obj):
from django.template.loader import render_to_string
return render_to_string(
"admin/posts/post/includes/content_html.html",
context={"post": obj},
request=self.request,
)
Tips and Tricks Programming Django 4.2 Django 3.2 Django 2.2
Also by me
Django Paddle Subscriptions app
For Django-based SaaS projects.
Django GDPR Cookie Consent app
For Django websites that use cookies.