仅当新值不是None时才更新字段

时间:2015-05-06 15:03:14

标签: python flask mongoengine

我想根据PUT请求修改文档。但是,请求中的某些值为None,最终会在文档中取消设置值。如何更新带有值的字段,同时保留未设置的字段?

class getUnit(restful.Resource):
    def put(self,unit_id):
        args = parser.parse_args()
        unit = Unit.objects.get_or_404(id=unit_id)
        unit.modify(block_number=args["block_number"], street_name=args["street_name"], postal_code=args["postal_code"], city=args["city"], country=args["country"], coordinates=args["coordinates"], price=args["price"], num_rooms=args["num_rooms"], sqft=args["sqft"])
        return jsonify(result = unit)

我尝试迭代每个参数但最终将“参数”作为关键字。

for argument in arguments:
    if args[argument]:
        unit.modify(argument=args[argument])

return jsonify(result = args[argument])

2 个答案:

答案 0 :(得分:1)

不是直接从args设置值,而是先检查它们是否为None。

def build_modify(args):
    return {key: value for key, value in args if value is not None}

将args传递给此函数,将结果解压缩到modify

unit.modify(**build_modify(parser.parse_args()))

答案 1 :(得分:0)

你可以写这个

updated_fields = {'set__'+key:value for key, value in args.items() if value}
unit.update(**updated_fields)