【问题标题】:How to pass Extra Context Into Django Rest Serializer from View如何将额外的上下文从视图传递到 Django Rest Serializer
【发布时间】:2016-10-30 21:45:55
【问题描述】:

我正在使用 Django REST 框架覆盖我的视图类中的 get_serializer_context() 方法,位于 (view.py) 下面,因此我可以将一个额外的上下文变量传递给下面的序列化器 (serializer.py),但我是当在浏览器中查看我的 API 时收到空值。我的结果如下(结果)。任何帮助将不胜感激。

view.py

class TaskListMixin(object):
    s1 = Schedule.objects.get(pk=1)
    r1 = Room.objects.get(pk=2)
    sp1 = r1.spacetype.pk
    s = Space.objects.get(pk = sp1)
    queryset = s.task.all()
    serializer_class = SimpleSerializer3
    permission_classes = (permissions.IsAuthenticated,)


class TaskListViewSet(TaskListMixin, generics.BulkModelViewSet):

    def get_serializer_context(self):
        context = super(TaskListViewSet, self).get_serializer_context()
        return {'request' : 'test'}

serializer.py

class SimpleSerializer3(BulkSerializerMixin, ModelSerializer):


is_my_object = serializers.SerializerMethodField()

def get_is_my_object(self, obj):
    test_me = self.context.get('request')


class Meta(object):
    model = Task
    list_serializer_class = BulkListSerializer
    fields = ('pk','task_name', 'is_my_object')

结果

[
{
    "pk": 1,
    "task_name": "Remove large debris from floor",
    "is_my_object": null
},
{
    "pk": 2,
    "task_name": "Clean walls and horizontal surfaces",
    "is_my_object": null
},
{
    "pk": 3,
    "task_name": "Clean touch points",
    "is_my_object": null
},
{
    "pk": 4,
    "task_name": "Empty trash container",
    "is_my_object": null
},
{
    "pk": 6,
    "task_name": "Spot clean desks/furniture",
    "is_my_object": null
},
{
    "pk": 7,
    "task_name": "High/Low dust",
    "is_my_object": null
}
]

【问题讨论】:

  • 你能解决这个问题吗?如果是,请分享您是如何解决的。

标签: python django serialization


【解决方案1】:

您正在获取您的视图上下文,但没有在更新时返回它。

   def get_serializer_context(self):
        context = super(TaskListViewSet, self).get_serializer_context()
        context.update({'request' : 'test'})
        return context

【讨论】:

    【解决方案2】:

    我解决了这个问题。我没有从 get_is_my_object(self, obj) 返回值

    def get_first_name(self, obj):
        test_me = self.context.get('request')
        return test_me
    

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 2020-09-14
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多