Python Django getattr():属性名必须是字符串

时间:2013-07-13 20:11:24

标签: python django

我正在使用python,Django并收到以下错误:

getattr(): attribute name must be string

location: val = getattr(obj, field)

        if field in headers:
            if not isinstance(field, str):
                val = getattr(obj, field)
            else:
                val = getattr(obj, field.LastName)

            if callable(val):
                val = val()
            if type(val) == unicode:
                val = val.encode("utf-8")
            row.append(val)

我尝试了很多代码但都失败了。

2 个答案:

答案 0 :(得分:3)

您可以使用field确认print(type(field))的对象类型。考虑到错误,它可能不是一个字符串。

查看代码,field看起来像属性的对象是字符串,例如LastName。这条线

val = getattr(obj, field)

阅读可能会更好

val = getattr(obj, field.someattribute)

如果field.someattribute不是字符串,则可以使用将其强制转换为字符串 str(field.someattribute)

总计val = getattr(obj, str(field.someattribute))

答案 1 :(得分:1)

可能是您缺少属性名称。

我为此遇到同样的错误

price = models.DecimalField(15, 2,)

但是当我修改如下所示的代码时,错误已解决。

price = models.DecimalField(max_digits=15, decimal_places=2,)