循环遍历 Django 的属性列表
Looping through a list of attirubutes from Django
基本上,到目前为止我已经了解到,以正确的方式编写代码意味着您不必复制和粘贴很多东西。至少从我读到的内容来看是这样。
我基本上需要根据布尔语句分配我的 Django 模型点。如果 True 加分,否则不加分。点值会改变,但现在我将它们设置为 1。
我可以 copy/paste 因为其中许多是我必须记录分数的,或者我可以看看是否有更简单的方法,所以最终这就是我的问题,有没有更简单的方法?
scores_bool = {
'spc': 1,
'medical': 1,
'photo_id': 1,
'presolo_test': 1,
'presolo_checkout': 1,
'endorsement_solo': 1,
'solo': 1,
'dual_xc': 1,
'inst_training': 1,
'dual_night': 1,
'tol_tower': 1,
'solo_xc': 1,
'solo_xc_150': 1,
'checkride_prep': 1,
}
if ppl.spc:
ppl.points += scores_bool['spc']
if ppl.medical:
ppl.points += scores_bool['medical']
if ppl.photo_id:
ppl.points += scores_bool['photo_id']
if ppl.presolo_test:
ppl.points += scores_bool['pre_solo_test']
所以基本上每个 ppl 属性都有一个 True False 语句,如果为真,则将点添加到它......等等
理想情况下,我会循环遍历 scores_bool.keys() 并说出如下内容:
for i in scores_bool.keys():
if ppl.i:
ppl.points += scores_bool[i]
Thankyou!
我认为你很接近,但是 ppl.i
行不通,getattr(ppl, i, None)
行。
for i in scores_bool.keys():
if getattr(ppl, i, None):
ppl.points += scores_bool[i]
使用内置 getattr
方法。
for i in scores_bool.keys():
if getattr(ppl, i):
ppl.points += scores_bool[i]
有关如何通过字符串名称调用方法的更多信息,read this
基本上,到目前为止我已经了解到,以正确的方式编写代码意味着您不必复制和粘贴很多东西。至少从我读到的内容来看是这样。
我基本上需要根据布尔语句分配我的 Django 模型点。如果 True 加分,否则不加分。点值会改变,但现在我将它们设置为 1。
我可以 copy/paste 因为其中许多是我必须记录分数的,或者我可以看看是否有更简单的方法,所以最终这就是我的问题,有没有更简单的方法?
scores_bool = {
'spc': 1,
'medical': 1,
'photo_id': 1,
'presolo_test': 1,
'presolo_checkout': 1,
'endorsement_solo': 1,
'solo': 1,
'dual_xc': 1,
'inst_training': 1,
'dual_night': 1,
'tol_tower': 1,
'solo_xc': 1,
'solo_xc_150': 1,
'checkride_prep': 1,
}
if ppl.spc:
ppl.points += scores_bool['spc']
if ppl.medical:
ppl.points += scores_bool['medical']
if ppl.photo_id:
ppl.points += scores_bool['photo_id']
if ppl.presolo_test:
ppl.points += scores_bool['pre_solo_test']
所以基本上每个 ppl 属性都有一个 True False 语句,如果为真,则将点添加到它......等等
理想情况下,我会循环遍历 scores_bool.keys() 并说出如下内容:
for i in scores_bool.keys():
if ppl.i:
ppl.points += scores_bool[i]
Thankyou!
我认为你很接近,但是 ppl.i
行不通,getattr(ppl, i, None)
行。
for i in scores_bool.keys():
if getattr(ppl, i, None):
ppl.points += scores_bool[i]
使用内置 getattr
方法。
for i in scores_bool.keys():
if getattr(ppl, i):
ppl.points += scores_bool[i]
有关如何通过字符串名称调用方法的更多信息,read this