I am trying to build a document object using from_json method. object.save() throws no error, but the document is not inserted in mongo.
On the other hand if I make the object by assigning values to each of the fields, it works fine.
I am unable to find the reason for this. Below is the code for both the cases.
from flask import Flask
from flask.ext.mongoengine import MongoEngine
import json, datetime
app = Flask(__name__)
app.config["MONGODB_SETTINGS"] = {'DB': 'test','host': 'localhost'}
app.config["SECRET_KEY"] = "mySecretKey"
db = MongoEngine(app)
class User(db.Document):
user_id = db.StringField(max_length=16, primary_key = True)
username = db.StringField(min_length=8)
email = db.EmailField(required = True, unique = True)
password = db.StringField(required = True)
date_of_birth = db.DateTimeField()
gender = db.StringField(choices = ('M', 'F'))
'''
This one works. This will add a user in local mongodb(test)
'''
u1 = User()
u1.username = 'test12345'
u1.user_id = 'testid12345'
u1.email = 'test@test.com'
u1.password = 'testerpass'
u1.save()
'''
This one doesn't works.
'''
u2 = User()
temp_json = {'username':'test2_12345','user_id':'testid2@12345','password':'testerpass2','email':'test2@test.com'}
u2 = u2.from_json(json.dumps(temp_json))
u2.save()
from_json()
is convert to JSON data an unsaved document instance. Do save of unsaved document is use parameterforce_insert=True
.But, your code I can.
I can not code here. (I need fixture data of unit test.)
I environment Django 1.6.5 and mongoengine 0.8.7
force_insert=True
is only try to create a new document.Every time use
force_insert=True
is create a new document.Use
force_insert=False
is get document in database.A mongoengine document object can be initialised with
**kwargs
. Thus using this we can implement thefrom_json
functionality in the following way :-This worked for me.
You are assigning
u2
to the result offrom_json()
, and losing reference to the original User object.Change
u2 = u2.from_json(...
tou2.from_json(...