繁体   English   中英

DRF,将自定义字段添加到ModelSerializer

[英]DRF, add custom field to ModelSerializer

我的项目中有一些模型,我需要API的特殊响应,我正在使用Django Rest框架。

class Goal(models.Model):
    name = models.CharField()
    # more fields

class Task(models.Model):
    name = models.CharField()
    goal = models.ForeignKey(Goal)

class UserTask(models.Model):
    goal = models.ForeignKey(Goal)
    user = models.ForeignKey(User)
    # other fields

我有这个回应:

{
  "name": "One goal",
  "task": [
    {
      "name": "first task"
    },
    {
      "name": "second tas"
    }
  ]
}

但是我需要这个:

{
  "name": "One goal",
  "task": [
    {
      "name": "first task",
      "is_in_usertask": true
    },
    {
      "name": "second tas",
      "is_in_usertask": false
    }
  ]
}

在DRF文档中看到了这一点,但我不知道如何通过当前用户(或URL paramenter中给出的其他用户)和每个Goal过滤UserTask

编辑:

# serializers

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task


class GoalSerializer(serializers.ModelSerializer):
    # related_name works fine
    tasks = TaskSerializer(many=True)

    class Meta:
        model = Goal

看一下这个对话: 如何在Django-Rest-Framework序列化程序中获取Request.User?

您无法直接访问request.user

尝试使用SerializerMethodField字段作为

class TaskSerializer(serializers.ModelSerializer):
    is_in_usertask = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Task
        fields = ('name', 'is_in_usertask')

    def get_is_in_usertask(self, task): return UserTask.objects.filter(user=self.context['request'].user, goal=task.goal).exists()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM