将参数传递给 Django REST 框架序列化程序以与模型一起使用

丁丁

我有一个Object带有state日期时间参数的方法的类dt如何将日期时间参数从 URL 传递到Object.state()

该模型:

class Object(models.Model):
    def state(self, dt=datetime.datetime.now()) -> dict:
        ...stuff...
        return {'dt': dt, 'other_stuff': stuff}

风景:

class ObjectDetail(generics.RetrieveAPIView):
    queryset = models.Object.objects.all()
    serializer_class = serializers.ObjectSerializer

    def get_serializer_context(self):
        return {'dt': self.request.query_params.get('dt', datetime.datetime.now())}

    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

和序列化器类:

class ObjectSerializer(serializers.HyperlinkedModelSerializer):
    state = StateSerializer(read_only=True, context={'dt': self.context['dt']})

    class Meta:
        model = models.Object
        fields = ('state')

class StateSerializer(serializers.Serializer):
    dt = serializers.DateTimeField()
    ... other stuff...

如您所见,我试图在视图中较早设置上下文dt的行state = StateSerializer(read_only=True, context={'dt': dt})作为额外上下文传递这里的问题是无法通过as未定义访问何时ObjectSerializer初始化dtself.context['dt']self

丁丁

解决办法是先做state一个serializers.SerializerMethodField(),然后再定义一个get_state方法。新的ObjectSeializer看起来像这样:

class ObjectSerializer(serializers.HyperlinkedModelSerializer):
    state = serializers.SerializerMethodField()

    class Meta:
        model = models.Object
        fields = ('state')

    def get_state(self, obj):
        state = obj.state(self.context['dt'])
        state_serializer = StateSerializer(state)
        return state_serializer.data

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将Graphene GraphQL框架与Django REST框架一起使用

如何传递选择显示名称以在Django REST框架中对模型进行序列化?

没有模型的Django REST框架序列化器

将请求上下文从Django Rest Framework中的Viewset传递给序列化器

Django REST框架:非模型序列化器

Django REST Framework-将额外的参数传递给动作

Django Rest框架将字段组在一起

django rest framework-如何将查询参数传递给外键序列化器?

在Django Rest Framework中保存序列化程序时将None传递给外键

Django Rest Framework将额外的参数传递给Serializer

Django Rest Framework:如何将额外的参数传递给Django序列化程序?

Django Rest Framework:如何将嵌套关系的UUID列表传递给序列化器?

Django Rest Framework:从序列化程序中的视图访问传递的参数

Django / Django Rest Framework-如何允许模型序列化程序将模型的外键字段设置为null?

可以将Django视图集与两个序列化程序一起使用吗?

Django rest框架使用FK序列化模型

如何使注释序列化程序与Django rest框架中的后期序列化程序一起工作?

将模型中未包含的字段添加到Django REST框架中的序列化器

Django Rest框架:将queryset传递给Response()

如何使用angularjs服务将表单参数传递给Rest?

Django REST Framework:将上下文传递给嵌套的序列化程序

DJango REST框架-如何将参数传递给序列化器__init__

django rest 框架 - 全局默认模型序列化器

Django REST Framework:序列化程序更新对象(如果存在)(通过唯一的一起)

将变量(非模型字段)传递给 django rest 框架中的序列化程序

在序列化程序 Django Rest Framework 中通过 id 传递模型实例

将命中从 django-hitcount 传递给模型序列化程序

如何使用 HTMX 和 Django 将参数传递给视图?

Django Serializer 将参数传递给模型函数