我想用默认值替换django对象中的空值:
示例:
class Buy(models.Model):
created = models.DateTimeField(null=True, blank=True, editable=False,default=timezone.now)
modified = models.DateTimeField(null=True, blank=True,default=timezone.now)
name = models.CharField(null=True,blank=True, max_length=200,default='')
这是我的剧本:
for buy in Buy.objects.all():
for f in Buy._meta.get_fields():
field = eval("buy." + f.name+" is None")
if field:
field = Buy._meta.get_field(f.name).get_default()
buy.save()
但是当我使用dumpdata进行json导出时,我仍然有
“名称”:null,
在我的json中代替了很多对象
“名称”:“”
。
我不理解将我的对象的null值迁移到“”的脚本似乎是正确的。
致谢
答案 0 :(得分:1)
首先,请勿使用eval
,因为它不安全。 99%的时间有更好的方法。
第二,更改局部变量将无效。函数返回并弹出堆栈框时,替换的值将被破坏。
因此,我建议使用getattr()
和setattr()
来执行查询:
setattr(buy, f.name, getattr(buy, f.name) or Buy._meta.get_field(f.name).get_default())
buy.save()
此一线将通过or
的魔力将任何伪造的值替换为默认值。然后,我们可以使用setattr
将正确的值分配给正确的属性。无需eval
。