2015-12-09 36 views
0

在我看来,我试图删除/删除一些以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

看看内置的getattr()函数是否能够满足您的需求。 – theWanderer4865

回答

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

Python doc

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()的稍微更Python。

相关问题