Django 1.4 - 使用存储在字典中的字段进行查询迭代

Django 1.4 - query iteration using fields stored in a dictionary

我有一个巨大的注册 table,有 112 个字段。对于特定搜索,我想比较 17 个字段并将颜色分配给变量 say 'clrSelected'。 我的代码是:

reg = Regisration.objects.filter('some condition').order_by("name") 
for r in reg:
  if r.name=='abc': clrSelected='#fff'
  if r.type=='1': clrSelected='#000'
  if r.appl=='10': clrSelected='#c1ff51'
  if r.code=='': clrSelected='#60c5f7'
  if r.qlty=='first': clrSelected='#f99334'
  ...
  ...

只有一个if条件,需要上色。这意味着要比较的字段(来自字典)将根据用户选择而改变。 我想从这样的字典中访问字段名称

flds = {'1':'name', '2':'type', '3':'appl', '4':'code', '5':'qlty',...}

然后像这样使用它

if r.flds['1']=='abc': clrSelected='#fff'

我如何使用上面的字段。我正在使用 Django 1.4 & python 2.7

为了回答问题,您可以使用 getattr:

if getattr(r, flds['1']) == 'abc': clrSelected = '#fff'

但是,我很确定您可以在这种情况下使用不同类型的实现,它不需要像这样使用 dict

我建议使用三元组列表:(fieldName, value, color)

some_list  = [('name', 'abc', '#fff'), ('type', '1', '#000'), ...]

并且,然后使用这个列表来确定颜色:

for fieldName, value, color in some_list:
    if getattr(r, fieldName) == value:
        clrSelected = color

查看您的实施,颜色似乎将基于匹配的最后一个 if 条件。如果是这种情况,您可以按相反的顺序创建 some_list,并在第一个匹配条件上创建 break