2

我正在使用 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)

我尝试了许多代码变体,但都失败了。

4

2 回答 2

5

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))

于 2016-11-30T17:33:54.683 回答
5

可能是您缺少属性名称。

我得到了同样的错误

price = models.DecimalField(15, 2,)

但是当我修改下面的代码时,错误得到了解决。

price = models.DecimalField(max_digits=15, decimal_places=2,)
于 2020-07-27T17:33:51.650 回答