【问题标题】:Errors including the custom model method in Django admin包含 Django admin 中的自定义模型方法的错误
【发布时间】:2021-09-12 14:09:47
【问题描述】:

我想做什么

我尝试制作自定义管理方法以在我的管理面板中包含产品缩略图预览。 product_thumbnailImageField 内的 Product 模型,其中包含我在管理面板上上传的每个产品的一般信息。

我想将product_thumbnail 设为不需要。因此,我也在我的 models.py 中设置了null=Trueblank=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。

  1. 我使用了 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


    【解决方案1】:

    你写except obj.product_thumbnail is None:,但这是非常不正确的!在except 关键字之后你应该指定一个异常类,而不是写一些条件。更好的是,为什么还要在这里使用异常?一般来说,如果可以这样做,应该避免异常,考虑到如果FileField / ImageField 没有文件,那么它们被认为是虚假的,您可以编写以下代码来解决您的问题:

    def thumbnail_preview(self, obj):
        if obj.product_thumbnail:
            return  mark_safe(f'<img src="{obj.product_thumbnail.url}" width="40%" />')
        return HttpResponse('No images')
    thumbnail_preview.short_description = '상품사진'
    

    【讨论】:

    • 您的回答确实有很大帮助。我认为我应该区分何时使用 try-except 和何时使用 if 清楚。谢谢!
    【解决方案2】:

    这意味着该文件根本没有在字段中上传,但是您正在尝试获取其 URL,这当然是不可能的,只需换行即可。查看另一种使用模板进行修复的方法:

    https://fixexception.com/django/the-s-attribute-has-no-file-associated-with-it/

    【讨论】:

    • 我在下面找到了另一个不错的解决方案,但无论如何我也会把你的评论作为一个很好的资源!
    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多