簡體   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