django - Serializer needs to include more info in a GET while accepting primitives in a POST -


right have following serializer:

class shiftserializer(serializers.modelserializer):     confirmed_location = locationserializer(required=false)      class meta:         model = shift 

when create new shift object can pass along basic object this...

{date_requested: "2015-06-11", employee: 4, shift_requested: 2} 

...and object gets created without issue.

in effort make shift objects bit more verbose requested them, declared serializer employee field gets include information employee:

class shiftserializer(serializers.modelserializer):     confirmed_location = locationserializer(required=false)     employee = employeeserializer(required=false)      class meta:         model = shift 

that produced desired effect: can see requested shift without making second query server every single user. unfortunately, after doing started getting http 400 errors whenever tried post same object make new shift:

invalid data. expected dictionary, got int.

i'm positive employeeserializer freaking out because i'm not passing in entire employee object, id pointing particular employee. possible include entire employee object when geting shift objects still accept single integer when posting create new shift object?

to read-only representation of employee, can add serializermethodfield. leave employee field intact post , put requests , add serialized representation @ employee_data.

class employeeserializer(serializers.modelserializer):     class meta:         model = employee  class shiftserializer(serializers.modelserializer):     confirmed_location = locationserializer(required=false)      # method named get_employee_data     employee_data = serializers.serializermethodfield()      class meta:         model = shift         fields = (             'confirmed_location',              'date_requested',              'shift_requested',             'employee',             'employee_data',         )      def get_employee_data(self, obj):         """ returns serialized representation of employee.         """         return employeeserializer(obj.employee).data 

Comments