shashisp
shashisp

Reputation: 2969

how to convert json in django models instances?

I am trying to save json data as django models instances, I am new to djano-rest-framework

here is my model:


   class objective(models.Model):
      description = models.CharField(max_length=200)
      profile_name = models.CharField(max_length=100)
      pid = models.ForeignKey('personal_info')

serializer.py


   class objective_Serilaizer(serializers.Serializer):
      description = serializers.CharField(max_length=200)
      profile_name = serializers.CharField(max_length=100)
      pid = serializers.IntegerField()

     def restore_object(self, attrs, instance=None):

        if instance:
           instance.description = attrs.get('description', instance.description)
           instance.profile_name = attrs.get('profile_name', instance.profile_name)
           instance.pid = attrs.get('pid', instance.pid)
           return instance
        return objective(**attrs)

json


     {
"objective": {
    "description": "To obtain job focusing in information technology.",
    "profile_name": "Default",
    "id": 1
    }
}

I tried


   >>> stream = StringIO(json) 
   >>> data = JSONParser().parse(stream)

I am getting following error


        raise ParseError('JSON parse error - %s' % six.text_type(exc))
     ParseError: JSON parse error - No JSON object could be decoded

Upvotes: 1

Views: 2377

Answers (2)

holdenweb
holdenweb

Reputation: 37023

If you are sure your JSON as a string is correct then it should be easy to parse without going to the lengths you currently are:

>>> import json
>>> stream = """\
...      {
... "objective": {
...     "description": "To obtain job focusing in information technology.",
...     "profile_name": "Default",
...     "id": 1
...     }
... }"""
>>> json.loads(stream)
{u'objective': {u'profile_name': u'Default', u'description': u'To obtain job focusing in information technology.', u'id': 1}}

So surely the question is how come you aren't able to parse it. Where is that JSON string you quote actually coming from? Once your JSON object is parsed, you need to address the top-level "objective" key to access the individual data elements in the record you want to create.

Upvotes: 0

agconti
agconti

Reputation: 18093

Use:

objective_Serilaizer(data=json)

or probably because your json is data on the request object:

objective_Serilaizer(data=request.DATA)

Here's a good walk through from the Django Rest-framework docs.

Upvotes: 1

Related Questions