2016-06-18 6 views
3

Django Rest Framework(rest_framework_mongoengine)を使用しており、自分のカスタムJSONオブジェクトを返すためにシリアライザのをto_representation()にオーバーライドしています。すべて正常に動作していますが、JSONフィールドの順序が乱れています。返送されるJSONオブジェクトの並べ替え/再構成方法を教えてください。シリアライザは、次のようになります。Django Rest Framework - jsonレスポンスの再構築方法

class PharmacySerializer(DocumentSerializer): 
    bank_account = serializers.DictField(child=serializers.CharField(), required=False) 

    class Meta: 
     model = Pharmacy 
     fields = (
      'id', 'name', 'email', 'mobile', 'address_line_1', 'address_line_2', 
      'city', 'state', 'zip', 'created_by', 'created_on', 'last_updated_by', 'license_number', 
      'bank_account', 'last_updated_on', 'is_email_verified', 'is_mobile_verified', 'is_active') 
     read_only_fields = ('created_by', 'created_on', 'last_updated_by', 'last_updated_on', 'is_active') 

    def to_representation(self, pharmacy): 
     return { 
      'id': str(pharmacy.id), 
      'name': pharmacy.name, 
      'email': pharmacy.email, 
      'mobile': pharmacy.mobile, 
      'address_line_1': pharmacy.address_line_1, 
      'address_line_2': pharmacy.address_line_2, 
      'city': pharmacy.city, 
      'state': pharmacy.state, 
      'zip': pharmacy.zip, 
      'created_by': pharmacy.created_by, 
      'created_on': pharmacy.created_on, 
      'last_updated_by': pharmacy.last_updated_by, 
      'license_number': pharmacy.license_number, 
      'bank_account': { 
       'bank_name': pharmacy.bank_account.bank_name, 
       'account_number': pharmacy.bank_account.account_number, 
       'account_type': pharmacy.bank_account.account_type 
      }, 
      'last_updated_on': pharmacy.last_updated_on, 
      'is_email_verified': pharmacy.is_email_verified, 
      'is_mobile_verified': pharmacy.is_mobile_verified, 
      'is_active': pharmacy.is_active 
     } 

そして、私は取得していますという応答は次のとおりです。

[ 
    { 
     "city": "City", 
     "name": "Some Pharmacy", 
     "zip": "778372", 
     "mobile": "9880082229", 
     "license_number": "SP22", 
     "is_mobile_verified": false, 
     "is_active": true, 
     "created_on": "2016-06-18T19:01:02.901", 
     "created_by": null, 
     "email": "[email protected]", 
     "state": "State", 
     "last_updated_by": null, 
     "is_email_verified": false, 
     "last_updated_on": "2016-06-18T19:01:02.901", 
     "address_line_2": null, 
     "id": "57659a6ea3b6561c0f20265e", 
     "bank_account": { 
      "bank_name": "HSBC", 
      "account_type": "Savings", 
      "account_number": "663822553" 
     }, 
     "address_line_1": "Address" 
    } 
] 

私はそれがto_representation(のリターン辞書と同じ順番になりたい)

+2

['OrderedDict'](https://docs.python.org/2/library/collections.html#collections.OrderedDict)を使用しようとしましたか? – gdlmx

+0

それはうまくいきませんでした:( – heaVenShaker

+0

@heaVenShaker 'to_representation()'メソッドをオーバーライドする特別な理由はありますか?DRFが通常返すオブジェクトの属性にアクセスしているので、そうする必要はないと思います。 –

答えて

関連する問題