Django 如何动态查找字段
Django How to dynamically lookup fields
我想做这样的事情:
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?但是,这不是我想要的。
感谢任何帮助
当你这样做时:
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]
我想做这样的事情:
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?但是,这不是我想要的。
感谢任何帮助
当你这样做时:
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]