【问题标题】:How to change the model column value while returning json data using django-rest framewrok如何在使用 django-rest 框架返回 json 数据时更改模型列值
【发布时间】:2014-06-17 14:08:34
【问题描述】:

我有一个存储整数的模式,用户将提供十六进制数,我将其转换为整数并将其存储在数据库中,现在我需要通过 rest-api 公开我的模型......通过这样做用户会看到整数值不是十六进制,如何将整数转换回十六进制并在 rest-api 中显示给用户?

型号:

class Address:
    base_addr = models.BigIntegerField(blank=False, null=False)

序列化器:

class AddressSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Address
        fields = (base_addr,

)

视图集:

class AddressViewSet(viewsets.ReadOnlyModelViewSet):
    model = Address
    serializer_class = AddressSerializer
    filter_fields = ('base_addr')
    filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter,)

【问题讨论】:

    标签: python json django rest django-rest-framework


    【解决方案1】:

    使用serializers.SerializerMethodField

    class Address:
        base_addr = models.BigIntegerField(blank=False, null=False)
    
        def get_hexadecimal(self):
            // your convertion logic here
            return addr_in_hexadecimal
    

    然后

    class AddressSerializer(serializers.HyperlinkedModelSerializer):
        bae_addr_hex = serializers.Field(source='get_hexadecimal')
        class Meta:
            model = Address
            fields = ('bae_addr_hex', ...)
    

    【讨论】:

    • 你不能改变你的模型怎么样?你只需要添加一个方法
    • 感谢 trinchet,如果用户从 rest-api 查询类似.. ?address = "0x5656576" 我如何将其转换回整数并在模型中搜索。 (我刚开始休息)
    • 在回答这个问题之前,为什么需要存储整数而不是十六进制数字?看来您只是为此而重载逻辑
    • 无论如何你可以看到如何过滤/搜索这里django-rest-framework.org/api-guide/…,这里是一个例子stackoverflow.com/a/21186065/1904584,希望对你有帮助:)
    猜你喜欢
    • 2022-08-16
    • 2017-08-21
    • 2021-08-14
    • 2015-01-28
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    相关资源
    最近更新 更多