我的功能如下:
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__'
我错过了什么让它起作用?
答案 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
运算符不仅返回一个布尔值,而是返回左侧值(如果它是非空的),否则返回右侧值。