【发布时间】:2021-09-12 14:09:47
【问题描述】:
我想做什么
我尝试制作自定义管理方法以在我的管理面板中包含产品缩略图预览。 product_thumbnail 是 ImageField 内的 Product 模型,其中包含我在管理面板上上传的每个产品的一般信息。
我想将product_thumbnail 设为不需要。因此,我也在我的 models.py 中设置了null=True 和blank=True。
class Product(TimeStampModel):
...
product_thumbnail = models.ImageField(verbose_name='상품사진', null=True, blank=True, upload_to='product_thumbnail')
我创建了如下自定义函数并将其包含在ProductAdmin 模型内的list_display 管理选项中。
def thumbnail_preview(self, obj):
return mark_safe(f'<img src="{obj.product_thumbnail.url}" width="40%" />')
thumbnail_preview.short_description = '상품사진'
我遇到了什么错误?
我收到如下错误:
ValueError: The 'product_thumbnail' attribute has no file associated with it.
我试图解决的问题
这可能是因为某些Product 可能没有product_thumbnail,因此Django 管理员由于其为空值而无法加载其url。
- 我使用了 try-except,这样如果 Django 找不到与该产品关联的
product_thumbnail,那么它会抛出错误文本。
def thumbnail_preview(self, obj):
try:
return mark_safe(f'<img src="{obj.product_thumbnail.url}" width="40%" />')
except obj.product_thumbnail is None:
return HttpResponse('No images')
thumbnail_preview.short_description = '상품사진'
然后我得到另一个错误如下:
TypeError: catching classes that do not inherit from BaseException is not allowed
我已经应用了迁移。我该如何解决这个问题?
【问题讨论】:
标签: python django django-models django-admin