0

我在基于的 Django 项目中使用自定义字段类型,django.db.models.IntegerField此类型用于模型中的各种字段。它用于将数据作为整数存储在数据库中,同时它具有更复杂的相关 Python 类型和字符串表示形式。它还实现了方法value_to_string,并且to_python在使用时受到尊重./manage.py dumpdata

我还公开了一个带有 DRF 的 REST API,其中使用了一个非常通用的序列化程序,该序列化程序基于其对象中rest_framework.serializers.HyperlinkedModelSerializerfields配置。__all__Meta

当访问该 API时TypeErrorrest_framework.fields.IntegerField.to_representation当它试图通过int.

现在,考虑到为所讨论的类型实现了反序列化例程,实现字段类型很容易(在 DRF 的含义中,作为前面提到的类的替代品)。但是,如果不为每个受影响的字段声明(DRF)字段类型,我将如何设置此字段类型和 Django ORM 之间的映射?我在序列化器字段文档rest_framework.fields模块中都找不到任何提示。

4

1 回答 1

1

您需要创建一个与您的模型字段对应的自定义序列化程序字段,然后将其添加到 DRF 用于 ModelSerializers 的映射中。

这也是 DRF 添加django.contrib.postgres.fields.*映射的方式。

像这样的东西:

class MyField(models.IntegerField):
    pass

class MyDrfField(Field):
    def to_internal_value(...)
    def to_representation(...)

ModelSerializer.serializer_field_mapping[MyField] = MyDrfField
于 2018-11-22T03:35:10.320 回答