在Django admin中显示图像 - 多对多内联管理员视图

问题描述 投票:0回答:1

我有以下型号:

class AModel(BaseModel):
    a_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=200)
    a_images = models.ManyToManyField(BModel)

class BModel(BaseModel):
    images = ImageField(upload_to='/')

我想在模型管理员表单中显示模型图像。我可以使用

class BModelInline(admin.TabularInline):
    model = AModel.a_images.through

如何在AModel表单管理中以表格格式显示图像预览?我已经尝试过覆盖了formfields,但它似乎没有用。

formfield_overrides = { models.ImageField: {'widget': AdminImageWidget}}

class AdminImageWidget(AdminFileWidget):
    def render(self, name, value, attrs=None):
        output = []
        if value and getattr(value, "url", None):
            image_url = value.url
            file_name=str(value)
            output.append(u' <a href="%s" target="_blank"><img src="%s" alt="%s" width="150px"/></a> ' % \
                (image_url, image_url, file_name))
        output.append(super(AdminFileWidget, self).render(name, value, attrs))
        return mark_safe(u''.join(output))
django django-models django-admin
1个回答
0
投票

如果您只想在管理模型中为AModel显示这些图像,您是否尝试过这样的事情?:

class AModelAdmin(admin.ModelAdmin):
    readonly_fields = ('images',)

    def images(self, obj):
        html = '<a href="{url}" target="_blank"><img src="{url}" /></a>'
        return format_html(''.join(html.format(url=image.url) for image in obj.a_images))

它也可以用django模型中的方法来实现

© www.soinside.com 2019 - 2024. All rights reserved.