Django如何动态查找字段

时间:2016-03-13 16:58:50

标签: django django-models django-queryset

我想做这样的事情:

before = [ rec.field for rec in all_relevant_records ]

# Do some operation on the all_relevant_records:
for rec in all_relevant_records:
    rec_pk = rec.pk
    new_field = get_new_field(rec, field)
    db.objects.filter(pk=rec_pk).update(field=new_field)

after = [ rec.field for rec in all_relevant_records ]

但是,这不起作用,因为字段无法解析为查询集字段。

我看过How to dynamically provide lookup field name in Django query?但是,这不是我想要的。

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

当你这样做时:

db.objects.filter(pk=rec_pk).update(field=new_field)

您正在使用关键字参数。这相当于:

db.objects.filter(**{'pk': rec_pk}).update(**{'field': new_field})

因此,如果field不是您的字段的名称,而是包含您的字段名称的变量,那么您要执行的操作是:

db.objects.filter(pk=rec_pk).update(**{field: new_field})

关于这个:

before = [ rec.field for rec in all_relevant_records ]

我不确定你想要达到的目标,但我想它应该是这样的:

before = [getattr(rec, field) for rec in all_relevant_records]