在我看来,我正在尝试清空/删除许多以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。