如何使用字典更新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理器上的updatefunction,但我相信不会发送任何信号(如果您不使用它们,这可能无关紧要)。 但是,您可能不应该使用它来更改单个对象:

 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()