[英]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.