如何使用字典更新Django模型中的字段?
假设我有一个这样的模型:
class Book(models.Model): num_pages = ... author = ... date = ...
我可以创build一个字典,然后插入或更新使用它的模型?
d = {"num_pages":40, author:"Jack", date:"3324"}
以下是使用字典创build的示例:
Book.objects.create(**d)
要更新现有模型,您需要使用QuerySet filter
方法。 假设你知道你要更新的书的pk
:
Book.objects.filter(pk=pk).update(**d)
如果你知道你想创build它:
Book.objects.create(**d)
假设你需要检查现有的实例,你可以通过get或create来find它:
instance, created = Book.objects.get_or_create(slug=slug, defaults=d) if not created: for attr, value in d.iteritems(): setattr(instance, attr, value) instance.save()
正如在另一个答案中提到的,您也可以使用querysetpipe理器上的update
function,但我相信不会发送任何信号(如果您不使用它们,这可能无关紧要)。 但是,您可能不应该使用它来更改单个对象:
Book.objects.filter(id=id).update()
使用**
创build一个新的模型。 遍历字典并使用setattr()
为了更新现有的模型。
来自Tom Christie的Django Rest框架
https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py
for attr, value in validated_data.items(): setattr(instance, attr, value) instance.save()