Skip to content

Instantly share code, notes, and snippets.

@0x0c72
Last active July 19, 2021 03:50
Show Gist options
  • Select an option

  • Save 0x0c72/af9e8fcdefc386a8404c39adbc07eddf to your computer and use it in GitHub Desktop.

Select an option

Save 0x0c72/af9e8fcdefc386a8404c39adbc07eddf to your computer and use it in GitHub Desktop.
Nested Writable Django Rest Framework Serializer
# `CompanySerializer` contains `create()` and `update()` methods that can
# create or update related Employees using the nested `EmployeeSerializer`
class EmployeeSerializer(serializers.ModelSerializer):
class Meta:
model = Employee
fields = ('id', 'name', 'email', 'company', 'created')
class CompanySerializer(serializers.ModelSerializer):
employees = EmployeeSerializer(many=True, required=False)
class Meta:
model = Company
fields = ('id', 'title', 'employees', 'created')
# Nested create
def create(self, validated_data):
employees_data = validated_data.pop('employees', None)
company = Company.objects.create(**validated_data)
if employees_data:
for data in employees_data:
Employee.objects.create(company=company, **data)
return company
# Nested update
def update(self, instance, validated_data):
employees_data = validated_data.pop('employees', None)
instance.title = validated_data.get('title', instance.title)
instance.save()
if employees_data:
employees = (instance.employees).all()
employees = list(employees)
for employee in instance.employees:
for k, v in employees_data.items():
setattr(employee, k, v)
employee.save()
return instance
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment