【问题标题】:Initializing drf Serializer初始化 drf 串行器
【发布时间】:2021-05-29 17:27:23
【问题描述】:

我有两个模型:用户和员工。我想通过 drf 返回以下 json: [ { 'admin': {}, 'employee': [{}, {}] }, { 'admin': {}, 'employee': [{}, {}] } ]。

但是,我不明白如何使用数据初始化 TeamSerializer。我应该将什么传递给 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()

【问题讨论】:

    标签: django serialization django-rest-framework


    【解决方案1】:

    您需要为团队创建一个模型来指定关系。

    如果我理解正确的话,每个团队都有一个管理员和多个员工,每个员工可以是一个团队的成员,一个管理员可以管理一个团队。所以管理员是一对一的关系,员工是一对多的关系。

    模型应如下所示:

    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
    

    然后为Team创建一个序列化器:

    class TeamSerializer(serializers.ModelSerializer):
        admin = UserSerializer()
        employees = EmployeeSerializer()
    
        class Meta:
            model = Team
            fields = ["admin", "employees"]
        
    

    我会更进一步,创建一个Admin 模型和AdminSerializer 来提供有关管理员的更多信息,但这取决于您的需求。

    【讨论】:

      猜你喜欢
      • 2021-05-10
      • 1970-01-01
      • 2018-03-16
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 2016-06-14
      • 2016-10-31
      相关资源
      最近更新 更多