【发布时间】:2013-11-26 00:59:00
【问题描述】:
我正在尝试遍历已知元素的列表,以便检查它们是否正确提交,然后对它们进行处理。问题是,我的元素是字符串,但是需要对应的元素对象来给用户对象赋值。
应该在 eval(element) 所在的位置有别的东西吗?
elements = ('first_name', 'last_name', 'email')
u = request.user
for element in elements:
if not element in form.errors:
dajax.alert('alert: %s' % form.cleaned_data[element])
u.eval(element) = form.cleaned_data[element]
dajax.add_css_class('div #%s' % element , 'form-group has-success')
【问题讨论】:
-
google
setattr,getattr... 你会找到答案的。 -
风格提示:这被认为是一种不好的做法:
if not element in form.errors:。如图here,应该是:if element not in form.errors:(我知道链接谈到is,但同样的规则适用于in)。 -
您确定要这样做吗?如果您的对象只有一个
dict属性和键'first_name'、'last_name'和'email',而不是三个单独的属性,那么您不需要花哨的setattr(thingy, element, value),只需thingy.elements[element] = value。有关详细信息,请参阅 this blog post 和 this one。 -
当然,如果您在大部分代码中使用这些属性作为静态命名属性,并且只需要在一个地方动态访问它们,那么这是一个合理的方式来做到这一点。只是当您通常想要动态访问它们时,您可能不需要属性。
标签: python django forms eval dajax