访问以某个字符串开头的实例属性



在我看来,我正在尝试清空/删除许多以real_开头的字段。

我可以做一些类似的事情:

plan = get_object_or_404(Plan, pk=self.kwargs['plan_id'])
plan.real_time = None
plan.real_date = None
plan.real_comments = None
plan.real_whatever = None
....
plan.save()

然而,我想一定有一种方法可以通过编程实现这一点。我所需要做的就是访问字段的名称,比较它是否真的以real_开头,然后更新那个字段。

我正在使用get_fields()(根据文档)。不过我不知道最后一部分该怎么做。

以下是我的观点代码:

plan = get_object_or_404(Plan, pk=self.kwargs['plan_id'])
plan_fields = plan._meta.get_fields()
for field in plan_fields:
    if field.name[:5] == "real_":
        plan.<not sure what to do here> = None
plan.save()

我想我一定是忽略了什么小东西。有指针吗?

使用Django 1.9。

if field.name[:5] == "real_":
    setattr(plan, field.name, None)

Python文档。

我推荐一些漂亮整洁的东西:

plan = get_object_or_404(Plan, pk=self.kwargs['plan_id'])
real_fields = [field for field in plan._meta.get_fields() if field.name.startswith('real_')]
for field in real_fields:
    setattr(plan, field, None)
plan.save()

这部分是基于观点的,但我觉得列表理解和.startswith()的使用稍微更像Python。

最新更新