我有一个使用mongo引擎的django模型。在模型中,
class MyMap(Document):
name = StringField(required=True, primary_key=True,max_length=50,unique=True)
cars = DictField()
如果我像这样更新数据库,它会在第一个条目的右边。有没有选项来执行dictfield的更新而不在模型之外进行更新?
x = MyMap(name="dave",cars={"ford":"abc"})
x.save()
x = MyMap(name="dave",cars={"mini":"abc"})
x.save()
谢谢,
答案 0 :(得分:1)
如果您尝试更新cars属性而不覆盖现有信息,那么您可以执行以下操作:
x = MyMap(name="dave",cars={"ford":"abc"})
x.save()
x.cars.update({"mini":"abc"})
x.save()
答案 1 :(得分:0)
不确定我是否正确理解了“模型之外”的含义,但是你不能从数据库中获取文档并更新它然后保存它吗?
doc = MyMap.objects(name="dave").first()
if doc:
doc.cars = {"mini":"abc"}
doc.save()
答案 2 :(得分:0)
您可以获取该对象然后进行更新(这是最简单的方法):
x = MyMap.objects.get(name="dave")
x.cars = {"mini":"abc"}
x.save()
https://docs.djangoproject.com/en/1.7/topics/db/queries/#saving-changes-to-objects
您还可以使用update()
:
MyMap.objects.filter(name="dave").update(cars={"mini":"abc"})
https://docs.djangoproject.com/en/1.7/ref/models/querysets/#update
您还可以使用update_or_create()
:
x, created = MyMap.objects.update_or_create(name="dave", defaults={'cars': {"mini":"abc"}})
https://docs.djangoproject.com/en/1.7/ref/models/querysets/#update-or-create
答案 3 :(得分:0)
这是更新模型的最佳方式。见https://docs.djangoproject.com/en/1.7/ref/models/querysets/#get-or-create
obj, created = MyMap.objects.get_or_create(name="dave")
obj.cars = {"mini":"abc"}
obj.save()
这适用于创建和更新对象