2011-08-30 61 views
2

我正在使用django-stdimage2在我的项目中重命名和调整图像大小。它具有通过Django Admin界面删除图像的功能:只需勾选一个复选框并单击保存即可。Django:强制转换Unicode找不到类型

我可以成功添加使用Django管理的图像,但是当我尝试删除返回此错误的图像:

错误消息

类型错误在/管理/应用/ gear_images/1/
强迫为Unicode:需要字符串或缓冲区,NoneType发现

型号

class gear_images(models.Model): 
    def __unicode__(self): 
     return self.image.name 

    gear_id = models.ForeignKey(gear) 
    image = StdImageField(upload_to='images/gear', blank=True, size=(640, 480, True), thumbnail_size=(100, 100, True)) 
    description = models.CharField(max_length=100) 

可能的原因

我假定返回一个错误,因为图像已经从数据库中删除,因此没有返回。

修复?

什么是正确的方法来编码这种情况?

编辑:找到解决方案。谢谢Vanessa!

def __unicode__(self): 
    if self.image is None: 
     return "None" 
    elif self.image.name is None: 
     return "None" 
    else: 
     return self.image.name 

谢谢:-)

回答

5

由于图像是不存在的,它正试图为“无”(空项)转换为Unicode,这是行不通的。你可以用它来测试:

def __unicode(self)__: 
    if self.image is None: 
     return "None" 
    else: 
     return self.image.name 
+0

谢谢你,凡妮莎!请参阅我上面的编辑。你认为这是一个很好的解决方案吗? –

+0

你想先检查self.image是否为None,如果不是,请检查self.image.name是否为None,以确保安全。如果self.image为None,那么不会有self.image.name这样的东西(因为None没有任何属性),所以如果你试图检查self.image.name,你将会得到一个错误。 –

+0

再次感谢!我修改了上面的代码。 –

相关问题