2017-03-24 22 views
1

我想更新Django中的jsonfield中的json对象,我在更新数据时遇到问题。更新JsonField中的数据django

我的模型看起来像这样 https://codeshare.io/Gbeonj

的json看起来像这样 https://codeshare.io/5obDPX

所以basicly的JSON有错误的数据,而不是“国民身份证”,它有“居民身份证”,所以我想更新这个json对象以获得正确的数据。 这里是我讲的

"info": { 
     "mobilePhone": "", 
     "firstName": "david", 
     "tags": [], 
     "middleName": "mirale", 
     "gender": "Male", 
     "documentType": "NATIONAL ID", 
     "beneficiary": false, 
     "dateOfBirth": "1995-03-04T08:01:42.165Z", 
     "documentNumber": "519011016721", 
     "dateOfBirthExact": false, 
     "role": "Child", 
     "lastName": "ABSURG0058", 
     "recipient": "Alternate", 
     "homePhone": "" 
     }, 

"documentType": "NATIONAL ID",应该是“居民身份证”

我使用下面的脚本来更新服务器的JSON对象。

import django 
django.setup() 

import sys 
reload(sys) # to re-enable sys.setdefaultencoding() 
sys.setdefaultencoding('utf-8') 


import json 
from django.db import transaction 
from maidea.apps.mobile.models import MobileDocument 


office = 'sa_de' 

#we fetch all the mobile documents from that have failed 
uploads = MobileDocument.objects.filter(
    status=MobileDocument.ERROR, 
    mobile_upload__office__slug=office 
) 

print('Number of uploads fetched: %d' %(uploads.count())) 

with transaction.atomic(): 
    for upload in uploads: 
     for member in upload.data['members']: 
      try: 
       doc_type_value = member['info'].get('documentType') 
      except: 
       doc_type_value = None 
      if doc_type_value == 'NATIONAL ID': 
      doc_type_value = doc_type_value.replace('NATIONAL ID', 'NATIONAL ID Card') 
      assert doc_type_value == 'NATIONAL ID Card' 
        upload.save() 

问题是这个对象没有被更新好心的我在做什么错?

回答

1

一旦你验证了doc_type_value你不设置它放回upload对象,你需要更新upload对象:

for upload in uploads: 
    data = upload.data 
    updated_members = [] 
    for member in data['members']: 
     try: 
      doc_type_value = member['info'].get('documentType') 
     except KeyError: 
      pass 
     else: 
      if doc_type_value == 'NATIONAL ID': 
       doc_type_value = 'NATIONAL ID Card' 
       member['info']['documentType'] = doc_type_value 
     updated_members.append(member) 

    data['members'] = updated_members 
    upload.data = data 
    upload.save() 
+0

感谢它的工作:) @aamir –

相关问题