在我看来,我正在尝试删除/删除以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。
答案 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。