删除多个Django模型属性

时间:2015-02-26 21:47:23

标签: python django

我们如何清除多个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()

我们可以使用字符串列表并循环它们吗?我尝试使用getattrbook._meta.get_field(field),但我无法清除该属性。

1 个答案:

答案 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})