在Django Admin中为选项添加额外数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Django Admin中为选项添加额外数据相关的知识,希望对你有一定的参考价值。

我有以下内容:

class Destination(models.Model):
    name = models.CharField
    picture = models.ImageField

    def __unicode__(self):
        return u"%s" % self.name

class Vacation(models.Model):
    destination = models.ForeignKey(Destination)

在我的Django Admin界面中创建模型时,我希望我的目标显示为带有目标名称和目标图片的单选按钮。

我正在使用自定义add_form模板,因此显示带有目标名称的单选按钮是没有问题的,但包含图片很困难。

我想按原样离开__unicode__(self),我只需要在此管理视图中返回与对象一起返回的图片。另外我不想内联对象。

有关如何执行此操作的任何建议(包括如何将其合并到模板中)都会很棒!

编辑:This SO post非常接近我需要的,但我想访问个人选择数据,而不是从修改后的标签解析它。

答案

这不是特定于管理员的答案,但我认为如果您可以为表单使用自定义模板,它应该在admin中工作。

您可以创建一个修改过的小部件(可能作为现有Django小部件的子类),将模型中的额外字段发送到自定义小部件模板。

您还可以在显示它的模板中手动呈现表单,并创建一个包含标记,使用目标对象的id获取任何额外信息,该ID作为选项的值传递。

例如:

your_template.html

{% load destinations %}
{% for opt in form.destination %}
{{ opt.tag }}
{% destination opt.data.value %}
{% endfor %}

destinations.py(在your_app / templatetags中)

from django import template
from your_app.models import Destination

register = template.Library()

@register.inclusion_tag('your_app/destination-option.html')
def destination(id):
    destination=Destination.objects.filter(id=int(id)).first()
    return {'destination':destination}

目的地option.html

<!-- any formatting you prefer -->
{{destination.title}}
<img src="{{destination.picture.image_url}}">

以上是关于在Django Admin中为选项添加额外数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中为选项标签添加属性?

如何在Active Admin中为自定义生成的页面添加导出为csv选项

在 django admin 中为内联项目添加完整更改表单的链接?

django-admin:添加额外的行总计

Django admin - 如何在自定义管理表单中为多对多字段添加绿色加号

如何将额外的参数传递给 django admin 自定义表单?