代码之家  ›  专栏  ›  技术社区  ›  demux

呈现时捕获到DoesNotExist:照片匹配查询不存在

  •  4
  • demux  · 技术社区  · 14 年前

    photo = Photo.objects.get(original_image__exact=file_name) 
    val = photo.admin_thumbnail.url
    

    我得到这个错误:

    Caught DoesNotExist while rendering: Photo matching query does not exist.
    

    这是我的课:

    class AdminImageWidget(forms.FileInput):
        """
        A ImageField Widget for admin that shows a thumbnail.
        """
    
        def __init__(self, attrs={}, *args, **kwargs):
            super(AdminImageWidget, self).__init__(attrs)
    
        def render(self, name, value, attrs=None):
            output = []
            file_name = unicode(value)
    
            if file_name:
                photo = Photo.objects.get(original_image__exact=file_name) 
                val = photo.admin_thumbnail.url
    
                output.append(('<a target="_BLANK" href="%s">'
                               '<img src="%s" /></a> '
                               % (val, val)))
            output.append(super(AdminImageWidget, self).render(name, value, attrs))
            return mark_safe(u''.join(output))
    

    但是,如果我在shell(python)中这样做管理.py外壳),它工作得很好!

    奇怪吧?

    2 回复  |  直到 12 年前
        1
  •  1
  •   Cesar Canassa    14 年前

    你到底想做什么?

    你应该找到另一种方法来获取图像名称。Django始终调用此方法“render”,即使字段本身无效。例如。:

    • 单击“保存”
    • Django发现admin中的另一个字段不正确,并将表单返回给我。
    • 他用'我.png'作为值参数。

    获取文件名还有其他方法,例如,可以重写save方法并获取对象实例。

        2
  •  0
  •   demux    14 年前

    我已经解决了这个问题,但我觉得应该有一个更优雅的解决方案。

    class AdminImageWidget(forms.FileInput):
        """
        A ImageField Widget for admin that shows a thumbnail.
        """
    
        def __init__(self, attrs={}, *args, **kwargs):
            super(AdminImageWidget, self).__init__(attrs)
    
        def render(self, name, value, attrs=None):
            output = []
    
            file_name = unicode(value)
    
            if file_name:
                pattern = re.compile('.png', re.IGNORECASE)
                val = '/media/photos_cache/' + pattern.sub('_admin_thumbnail.png', file_name)
    
                output.append(('<a target="_BLANK" href="%s">'
                               '<img src="%s" /></a> '
                               % (val, val)))
            output.append(super(AdminImageWidget, self).render(name, value, attrs))
            return mark_safe(u''.join(output))
    

    问题是你必须预先缓存缩略图。

    奇怪。。。现在它工作了。。。

    class AdminImageWidget(forms.FileInput):
        def __init__(self, attrs={}, *args, **kwargs):
            super(AdminImageWidget, self).__init__(attrs)
    
        def render(self, name, value, attrs=None):
            output = []
    
            file_name = unicode(value)
    
            if file_name:
                photo = Photo.objects.get(original_image=file_name)
    
                val = photo.admin_thumbnail.url
    
                output.append(('<a target="_BLANK" href="%s">'
                               '<img src="%s" /></a> '
                               % (val, val)))
            output.append(super(AdminImageWidget, self).render(name, value, attrs))
            return mark_safe(u''.join(output))
    
    推荐文章