如何将自定义参数传递给 Django 自定义相关字段序列化程序

龙猫

我写了一个自定义关系字段

class CustomField(serializers.RelatedField):

    def to_representation(self, obj):
        
        print(self.context)

        return {
            'id': obj.test_id,
            'name': obj.test_name,
        }

    def to_internal_value(self, data):
        try:
            try:
                return self.get_queryset().get(test_id=data)
            except KeyError:
                raise serializers.ValidationError(
                    'id is a required field.'
                )
            except ValueError:
                raise serializers.ValidationError(
                    'id must be an integer.'
                )
        except:
            raise serializers.ValidationError(
            'Obj does not exist.'
            )

这就是 CustomField 的使用方式

    sample_field = CustomField(queryset=SampleModel.objects.all())

如果我想在 CustomField 的 to_representation 和 to_internal_value 函数中传递以后将像 self.var 一样访问的其他参数,我应该怎么做?

龙猫

我覆盖了该__init__()函数来设置 to_representation to_internal_value 函数所需的自定义参数。这是它的代码

class CustomField(serializers.RelatedField):

    def __init__(self, *args, **kwargs):
        id_field = kwargs.pop('id_field', None)
        name_field = kwargs.pop('name_field', None)
        
        super(CustomField, self).__init__(*args, **kwargs)
        self.id_field = id_field
        self.name_field = name_field        

    def to_representation(self, obj):
        
        print(self.context)

        return {
            'id': getattr(obj,self.id_field),
            'name': getattr(obj,self.name_field),
        }

    def to_internal_value(self, data):
        try:
            try:
                return self.get_queryset().get(pk=data)
            except KeyError:
                raise serializers.ValidationError(
                    'id is a required field.'
                )
            except ValueError:
                raise serializers.ValidationError(
                    'id must be an integer.'
                )
        except:
            raise serializers.ValidationError(
            'Obj does not exist.'
            )

我现在可以像这样使用这个 CustomField:

sample_field = CustomField(queryset=SampleModel.objects.all(),id_field="test_id",name_field="test_name")

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

DJANGO:如何编写自定义序列化器,以从相关模型中添加字段?

Django将自定义表单参数传递给Formset

如何在Django Rest Framework序列化程序中自定义字段

Django Rest Framework 序列化自定义字段

Django REST序列化程序和自定义模型字段中的其他属性

从序列化程序自定义字段上的Django Rest Order?

如何将自定义参数传递给应用

如何在 Django REST 框架中的自定义序列化程序字段中访问请求对象?

Django DRF序列化程序自定义关系字段如何构建to_internal_value的返回值?

序列化中的嵌套字段在Django REST框架中使用自定义字段

如何自定义Django REST序列化程序的默认设置

一个如何自定义Django Rest Framework序列化程序输出?

如何在 Django 中使用序列化程序返回自定义的非模型值?

django-rest-auth:自定义注册序列化器不保存自定义字段

Django Rest Framework:仅在自定义验证之后,如何将数据传递给嵌套的序列化器并创建对象

如何将自定义参数传递给高级安装程序 11.4

序列化DRF中的自定义相关字段

Django REST-rest_auth自定义字段未序列化

Django:自定义对象json序列化

Django自定义反序列化

DRF:相关序列化程序的自定义排序

如何将自定义道具传递给道具?

如何将自定义布局传递给PopupMenu?

使用 Django Rest Framework 在序列化程序中自定义响应

Django restframework序列化程序响应自定义消息

Django REST-完整用户名的自定义序列化程序

Django REST Framework - 自定义序列化程序覆盖模型约束

Django Rest Framework序列化程序中的自定义错误消息

自定义来自Django Rest Framework序列化程序的状态代码响应