Django:如何通过函数读取模型的属性?

时间:2015-12-16 09:48:26

标签: django

我的功能如下:

def get_initial(self):
    initial = super(EditView, self).get_initial()
    u = self.request.user
    initial['user_last_name'] = u.last_name if u.last_name else u''
    initial['email'] = u.email if u.email else u''
    return initial

我会有很多字段要预先填写,所以我想做这样的事情(以下代码不起作用):

def get_initial(self):
    initial = super(EditView, self).get_initial()

    def apply_initial(idx, obj, prop):
        initial[idx] = obj[prop] if getattr(obj, prop) else u''

    u = self.request.user
    apply_initial('user_first_name', u, 'first_name')
    apply_initial('user_last_name', u, 'last_name')
    # ... and so on

我明白了:

'User' object has no attribute '__getitem__'

我错过了什么让它起作用?

2 个答案:

答案 0 :(得分:2)

您正在尝试访问prop作为对象的索引。这应该是<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19</version> <configuration> <includes> <include>%regex[ExampleTest\.groovy]</include> </includes> </configuration> </plugin> </plugins> </build> 而不是getattr(obj, prop)

obj[prop]

答案 1 :(得分:0)

在原始代码中,您会查看u.last_name是否为空值,而不是是否存在。该代码的较短版本是:

def get_initial(self):
    initial = super(EditView, self).get_initial()
    u = self.request.user
    initial['user_last_name'] = u.last_name or u''
    initial['email'] = u.email or u''
    return initial

Python中的or运算符不仅返回一个布尔值,而是返回左侧值(如果它是非空的),否则返回右侧值。