Отображение изображения в админке Django - встроенный админ - PullRequest
0 голосов
/ 20 марта 2019

У меня есть следующие модели:

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='/')

Я хочу отобразить изображения BModel в форме администратора AModel. Я могу сделать это, используя

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

Как отобразить предварительный просмотр изображения в табличном формате в форме администратора AModel? Я уже пробовал переопределять поля формы, но, похоже, это не работает.

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))

1 Ответ

0 голосов
/ 27 марта 2019

Если вы просто хотите отобразить эти изображения в модели администратора для 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))

Это также может быть doon с методом в модели Джанго

...