在Django管理-多对多内联管理视图中显示图像
我有以下型号:在Django管理-多对多内联管理视图中显示图像,django,django-models,django-admin,Django,Django Models,Django Admin,我有以下型号: 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='/') 我想在AModel管理表单中显
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='/')
我想在AModel管理表单中显示BModel图像。我可以使用
class BModelInline(admin.TabularInline):
model = AModel.a_images.through
如何在AModel form admin中以表格格式显示图像预览?我已经尝试过重写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))
formfield_overrides={models.ImageField:{'widget':AdminImageWidget}
类AdminImageWidget(AdminFileWidget):
def render(自身、名称、值、属性=无):
输出=[]
如果值和getattr(值,“url”,无):
image\u url=value.url
文件名=str(值)
输出。追加(u“”%\
(图像url、图像url、文件名))
append(super(AdminFileWidget,self).render(名称、值、属性))
返回标记_safe(u“”。连接(输出))
如果您只想在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))
类AModelAdmin(admin.ModelAdmin):
只读_字段=('images',)
def图像(自身、obj):
html=“”
返回format_html(“”.join(obj.a_图像中图像的html.format(url=image.url))
它也可以通过django模型中的方法实现