【问题标题】:Django How to dynamically lookup fieldsDjango 如何动态查找字段
【发布时间】:2016-03-13 16:58:49
【问题描述】:

我想做这样的事情:

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? 但是,这不是我想要的。

任何帮助表示赞赏

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案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]
    

    【讨论】:

    • 解释得很好!您的回答确实解决了我遇到的两个问题之一。第二个问题是如何在列表推导之前和之后动态获取字段。你有什么想法吗?
    • 我不明白你在做什么。你能用文字解释一下吗? beforeafter 应该是什么?我编辑了我的答案,但我不确定这就是你想要实现的目标。
    • 谢谢安托万!这是很多及时的帮助
    猜你喜欢
    • 2010-09-23
    • 2010-11-16
    • 2021-12-22
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多