Можно ли изменить отображение атрибута модели Binaryfield в панели администратора Django, основываясь на значении другого атрибута?

Я работаю над проектом, где у меня есть модель, которая хранит некоторые BinaryField в базе данных.


class Entry(models.Model):
    ...
    params = models.JSONField()
    body = models.BinaryField()
    ...

params будет содержать тег с типом элемента body. Например, это может быть html, и body будет html-текстом, или изображение, и body может быть изображением и т. д.

Прямо сейчас детали админки Django выглядят примерно так:


Body:    <memory at 0x7355581f0e80>

Можно ли изменить способ отображения этой информации в админке django, основываясь на информации, полученной из других атрибутов?

Спасибо за уделенное время!

Используйте свойство, определяющее, как его рендерить. Например:

from django.contrib import admin


class Entry(models.Model):
    # …
    params = models.JSONField()
    body = models.BinaryField()

    @admin.display(description='body')
    def render_body(self):
        if self.params is not None:
            # render it one way
            return str(self.body)
        else:
            return 'something else'

и используйте это в .list_display [Django-doc]:

class EntryAdmin(admin.ModelAdmin):
    list_display = ['render_body']
Вернуться на верх