2015-02-12 6 views
2

У меня есть модель django, использующая двигатель монго. В модели, которая есть,Обновления DB Django Python

class MyMap(Document): 
    name = StringField(required=True, primary_key=True,max_length=50,unique=True) 
    cars = DictField() 

Если я обновляю db, так что это будет по правому краю первой сделанной записи. Есть ли возможность выполнить обновление для поля dict, не делая его вне модели?

x = MyMap(name="dave",cars={"ford":"abc"}) 
x.save() 

x = MyMap(name="dave",cars={"mini":"abc"}) 
x.save() 

Спасибо,

+0

Есть ли причина 'класса MyMap (Документ)' вместо 'класса MyMap (models.Model)'? – Alexander

ответ

0

Не уверен, если я правильно понял, что вы имеете в виду с «внешней модели», но не могли бы вы просто получить документ из БД и обновлять его, а затем сохранить его?

doc = MyMap.objects(name="dave").first() 
if doc: 
    doc.cars = {"mini":"abc"} 
    doc.save() 
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

1

Если вы пытаетесь обновить атрибут автомобилей без перезаписи существующей информации, то вы могли бы сделать что-то вроде:

x = MyMap(name="dave",cars={"ford":"abc"}) 
x.save() 

x.cars.update({"mini":"abc"}) 
x.save() 
Смежные вопросы