我想做这样的事情:
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?但是,这不是我想要的。
任何帮助表示赞赏
答案 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]