我想在Django Admin中显示一个小预览图像。我做了这个hack,当密钥在实际模型本身时就可以工作。
class Product(models.Model):
prod_name = models.CharField ("Name", max_length=130)
image = models.URLField(max_length=340, blank=True, null=true)
def admin_image(self):
return '<center><a href="%s" target="_blank"><img src="%s"/width="100px"></a></center>' %(self.image, self.image)
admin_image.allow_tags = True
但是,我希望它能够从外键显示图像(读取URL)。我试过以下但没有运气:
class Product_Option(models.Model):
colour = models.CharField (max_length=80, blank=True, null=True)
size = models.CharField (max_length=80, blank=True, null=True)
image_default = models.URLField(max_length=340, blank=True, null=True) # SHOW this image by
class Product(models.Model):
prod_name = models.CharField ("Name", max_length=130)
image = models.URLField(max_length=340, blank=True, null=true)
Default_Image = models.ForeignKey(Product_Option, blank=True, null= True)
class ProductAdmin(ImportExportModelAdmin):
resource_class = ProductResource
def admin_image(self, obj):
return '<center><a href="%s" target="_blank"><img src="%s"/width="100px"></a></center>' %(obj.Stock_Image.image_default.url, obj.Stock_Image.image_default.url)
admin_image.allow_tags = True
list_display = ('prod_name','admin_image')
readonly_fields = ('admin_image',)
答案 0 :(得分:1)
您的代码有点令人困惑,您应该小心将HTML类型代码放入模型中。话虽如此,假设您尝试通过外键关系向管理员添加缩略图,这将是最简单的方法:
from django.utils.html import format_html
class ProductAdmin(ImportExportModelAdmin):
resource_class = ProductResource
list_display = ('prod_name', 'admin_image')
readonly_fields = ('admin_image',)
def admin_image(self, obj):
return format_html('<center><a href="{0}" target="_blank"><img src="{1}"/width="100px"></a></center>', obj.Default_Image.image_default, obj.Default_Image.image_default)
admin_image.allow_tags = True
注意:请注意format_html()
的使用。在这些情况下始终使用它来避免漏洞,因为它可能会逃脱恶意代码。
此外,您尝试使用image_default.url
,ImageField
仅存在于URLField
,而不是image_default
。我删除了它,只支持{{1}}。