python 2.7 - Inverting the ModelSerializer order with Django-Rest-Framework -


using python v2.7, django 1.10, drf 3.x related other pending question at: including data in django intermediate table in django-rest-framework serializer i'm getting set of serializers i've built:

{     "id": 11,     "asset_number": "1234",     "serial_number": "1234",     "name": "instrument1",     "checksum_string": "0123456789abcdef0123",     "instr_type": {         "id": 70,         "make": "make1",         "model": "model1",         "service_email": "model1@company.com",         "service_website": "www.model1.com"     },     "validated_versions": [{         "id": 9,         "method": {             "id": 9,             "name": "method1",             "description": "method 1 description"         },         "version_name": "123",         "cmd_line_script": "script",         "sop": "sop"     }, {         "id": 10,         "method": {             "id": 10,             "name": "method2",             "description": "method 2 description"         },         "version_name": "123",         "cmd_line_script": "script",         "sop": "sop"     }, {         "id": 12,         "method": {             "id": 10,             "name": "method2",             "description": "method 2 description"         },         "version_name": "456",         "cmd_line_script": "script",         "sop": "sop"     }] } 

but notice there's lot of redundancy in data, want have show method child of instrument, methods have version associated instrument being serialized. want versions of method listed children of method, excluding versions of method not validated on instrument. want instead:

{     "id": 11,     "asset_number": "1234",     "serial_number": "1234",     "name": "instrument1",     "checksum_string": "0123456789abcdef0123",     "instr_type": {         "id": 70,         "make": "make1",         "model": "model1",         "service_email": "model1@company.com",         "service_website": "www.model1.com"     },     "validated_methods": [{         "id": 9,         "name": "method1",         "description": "method 1 description",         "valid_versions": [{             "id": 9,             "version_name": "123",             "cmd_line_script": "script",             "sop": "sop"         }]     }, {         "id": 10,         "name": "method2",         "description": "method 2 description",         "valid_versions": [{             "id": 10,             "version_name": "123",             "cmd_line_script": "script",             "sop": "sop"         }, {             "id": 12,             "version_name": "456",             "cmd_line_script": "script",             "sop": "sop"         }]     }] } 

here's serializers currently, in case helps:

class userserializer(serializers.modelserializer):     class meta:         model = settings.auth_user_model         excludes = 'password'  class userprofileserializer(serializers.modelserializer):     #user = serializers.serialize(settings.auth_user_model, read_only=true)     user = userserializer(read_only=true)     class meta:         model = userprofile.user         #fields = ('last_login', 'is_superuser', 'username', 'first_name', 'last_name', 'email', 'is_staff', 'is_active', 'date_joined')         fields = '__all__'         #excludes = ('password',)  class instrtypeserializer(serializers.modelserializer):     class meta:         model = instrtype         fields = '__all__'  class methodserializer(serializers.modelserializer):     description = serializers.readonlyfield(source='descripton')     class meta:         model = method         fields = ('id', 'name', 'description')  class versionserializer(serializers.modelserializer):     method = methodserializer(read_only=true)     #instr_version = instr_versionserializer(source='instr_version_set', many=true, read_only=true)     class meta:         model = version         fields = ('id', 'method')#, 'version_number', 'cmd_line_script', 'sop')  class instr_to_versionserializer(serializers.modelserializer):     version = versionserializer(source='fk_version', read_only=true, many=true)     validator = userprofileserializer(source='validating_user.user', read_only=true)     #validator = serializers.readonlyfield(source='self.validating_user.user.email')     version_name = serializers.readonlyfield(source='version_number')     cmd_line_script = serializers.readonlyfield()     sop = serializers.readonlyfield()     method = methodserializer(source='fk_method',read_only=true)     time_validated = serializers.readonlyfield(source= 'timestamp')      class meta:         model = instr_version         fields = ('id', 'version', 'validator', 'time_validated', 'method', 'version_name', 'cmd_line_script', 'sop')   class instrumentserializer(serializers.modelserializer):     instr_type = instrtypeserializer(source='fk_instr_type', read_only=true)     validated_versions = instr_to_versionserializer(source='versionsfrominstrument', many=true, read_only=true)      class meta:         model = instrument         fields = ('id', 'asset_number', 'serial_number', 'name', 'checksum_string', 'instr_type', 'validated_versions') 

thanks in advance, everyone.


Comments

Popular posts from this blog

asynchronous - C# WinSCP .NET assembly: How to upload multiple files asynchronously -

aws api gateway - SerializationException in posting new Records via Dynamodb Proxy Service in API -

asp.net - Problems sending emails from forum -