将图像渲染到 Django admin 中的选择/字符字段
Posted
技术标签:
【中文标题】将图像渲染到 Django admin 中的选择/字符字段【英文标题】:Render image to a choice/char field in Django admin 【发布时间】:2021-08-25 10:07:07 【问题描述】:我的模型中有一个 CharField,如下所示:
simbol_oznaka = models.CharField(choices=CHOICES_SIMBOLI, null=True, blank=True, verbose_name="Simbol", max_length=512)
使用这样的选择元组:
CHOICES_SIMBOLI=( ('', '没有图像'), ('media/simboli/2.png', '图片 1'),).
我想知道如何在 django 管理员更改/添加表单中呈现图像,因为我不希望用户看到“图像 1”文本而是图像本身。
这是它目前的样子:
用例:我希望用户能够从几个将显示在下拉菜单(不一定是下拉菜单)中的图像中只选择一个
【问题讨论】:
【参考方案1】:如果您真的想要选择菜单中的图像,这有点棘手,因为<option>
里面不能有<img>
,我建议查看这个问题以确定您想要哪种类型的解决方案拿那个:How to add images in select list?
由于听起来好像您不一定想要下拉菜单并且只有几张图片,您或许可以改用广播组。
使用 Django 可以做到这一点的一种方法是继承 Radioselect
小部件并覆盖 option_template_name
类变量,如下所示:
from django import forms
class SimbolRadioSelect(forms.RadioSelect):
option_template_name = 'myapp/forms/widgets/simbol_radio_option.html'
然后您需要创建option_template_name
类变量中指定的模板:
% load static %
<label% if widget.attrs.id % for=" widget.attrs.id "% endif %>
<input type=" widget.type "
name=" widget.name "
value=" widget.value|stringformat:'s' "
% include "django/forms/widgets/attrs.html" %>
% if widget.value %
<img src="% get_media_prefix % widget.value|stringformat:'s' ">
% else %
widget.label
% endif %
</label>
我主要是通过查看 django 源代码中的radio_option.html
和其他模板来设计这个模板的:https://github.com/django/django/tree/main/django/forms/templates/django/forms/widgets
然后你会想在你的表单中使用它(或者如果你还没有的话,创建一个):
from django import forms
class SimbolAdminForm(forms.ModelForm):
class Meta:
fields = '__all__'
widgets =
'simbol_oznaka': SimbolRadioSelect,
然后你可以在你的管理类中使用表单:
from django.contrib import admin
class SimbolAdmin(admin.ModelAdmin):
form = SimbolAdminForm
admin.site.register(Simbol, SimbolAdmin)
然后您将在管理员中结束:
【讨论】:
谢谢卢克,这正是我所做的。这不是我想要的 100%,但经过很少的修改,结果证明它不仅仅是一个体面的解决方法。因为这个事实,我会接受这个答案。以上是关于将图像渲染到 Django admin 中的选择/字符字段的主要内容,如果未能解决你的问题,请参考以下文章