首页 > 解决方案 > Initializing drf Serializer

问题描述

I have two models: User and Employee. I want to return following json via drf: [ { 'admin': {}, 'employee': [{}, {}] }, { 'admin': {}, 'employee': [{}, {}] } ].

However, I don't understand how to initialize a TeamSerializer with data. What should I pass into TeamSerializer

    class Meta:
        model = User
        fields = [
            "first_name",
            "last_name",
            "email",
            "hourly_rate",
            "role",
        ]


class EmployeeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Employee
        fields = [
            "first_name",
            "last_name",
            "email",
            "hourly_rate",
            "role",
        ]


class TeamSerializer(serializers.Serializer):
    admin = AdminSerializer()
    employee = EmployeeSerializer()

标签: djangoserializationdjango-rest-framework

解决方案


You will need to create a model for team to specify the relation.

If I understand right, each team has an admin and multiple employees, each employee can be member of one team, and an admin can administer one team. so one to one relation for admin and one to many relation for employee.

The model should look like this:

class Team(models.Model):
    admin = models.OneToOneField(get_user_model(), on_delete=models.SET_NULL, null=True)

class Employee(models.Model):
    user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
    team = models.ForeignKey(Team, on_delete=models.CASCADE, related_name="employees")
    # all the rest of your fields here

Then create a serializer for Team:

class TeamSerializer(serializers.ModelSerializer):
    admin = UserSerializer()
    employees = EmployeeSerializer()

    class Meta:
        model = Team
        fields = ["admin", "employees"]
    

I would take that even farder and create a Admin model and AdminSerializer also to provide more information about the admin, but it depends on your needs.


推荐阅读