访问以特定字符串开头的实例属性

时间:2015-12-09 16:26:10

标签: django

在我看来,我正在尝试删除/删除以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()as per the documentation)。虽然我不知道怎么做最后一部分。

以下是我的观点代码:

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。

2 个答案:

答案 0 :(得分:2)

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

Python doc

答案 1 :(得分:1)

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

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()的使用略微更加Pythonic。