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.

Revisions

  1. 0x0c72 revised this gist Jul 19, 2021. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions serializers.py
    Original file line number Diff line number Diff line change
    @@ -1,10 +1,11 @@
    # `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')

    # `CompanySerializer` contains `create()` and `update()` methods that
    # can create or update Employees using the nested `EmployeeSerializer`
    class CompanySerializer(serializers.ModelSerializer):
    employees = EmployeeSerializer(many=True, required=False)

  2. 0x0c72 created this gist Jul 19, 2021.
    39 changes: 39 additions & 0 deletions serializers.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,39 @@
    class EmployeeSerializer(serializers.ModelSerializer):
    class Meta:
    model = Employee
    fields = ('id', 'name', 'email', 'company', 'created')

    # `CompanySerializer` contains `create()` and `update()` methods that
    # can create or update Employees using the nested `EmployeeSerializer`
    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