我们如何清除多个Django模型属性而不必在循环中列出每个单独的属性?
books = Book.objects.all()
for book in books:
book.description = None
book.title = None
book.etc = None # other attribute
book.etc = None # other attribute
book.etc = None # other attribute and etc.
book.save()
我们可以使用字符串列表并循环它们吗?我尝试使用getattr
和book._meta.get_field(field)
,但我无法清除该属性。
答案 0 :(得分:1)
使用setattr
功能代替getattr
:
for attr in ('description', 'title', 'etc'):
setattr(book, attr, None)
book.save()
但是如果你没有在save()
方法或*_save
信号中做一些特别的事情,那么请使用@ two-bit-alchemist的建议:
Book.objects.all().update(description=None, title=None, etc=None)
或者,如果您不想重复=None
,可以为**kwargs
构建update()
:
fields = ('description', 'title', 'etc')
Book.objects.all().update(**{f: None for f in fields})