在Django序列化程序中动态创建字段

时间:2019-04-24 15:38:51

标签: python django

我正在尝试使 Django的Dynamic Field Serializer 正常工作。

到目前为止,我已经尝试了一些方法:

  1. Dynamic Modifying Fields

这是我的实现方式:

class DynamicFieldsModelSerializer(serializers.ModelSerializer):
    def __init__(self, *args, **kwargs):
        super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs)

        dd={}
        for i, h in enumerate(settings.LOCATION_HIERARCHY):
            dd[f'step_{i}'] = serializers.CharField(trim_whitespace=True)

        if dd is not None:
            self.data.update(dd)

,然后从实际的序列化程序(同样在serializers.py中):

class LocationSerializer(DynamicFieldsModelSerializer):

    class Meta:
        model = Location
        exclude = ('some', 'fields', 'to', 'exclude',)

来自views.py

class LocationEntry(GenericAPIView):
    serializer_class = LocationSerializer
  1. SerializerMethod

这是我的版本:

class LocationSerializer(serializers.ModelSerializer):
    field_name = serializers.SerializerMethodField('')

    def get_field_name(self, foo):
        dd={}
        for i, h in enumerate(settings.LOCATION_HIERARCHY):
            dd[f'step_{i}'] = serializers.CharField(trim_whitespace=True)
        return dd

    class Meta:
        model = Location
        exclude = ('some', 'fields', 'to', 'exclude',)
  1. Adding it as a property to the actual model

我没有收到任何错误,但是当我在浏览器的REST API视图中查看它时,似乎并没有收到任何更改。同样,如果我放置了调试器,则在.update()语句的行之前并运行.update(),它实际上会返回我期望的结果。

如果有人可以指出我在做什么错,那将非常感谢。预先感谢

0 个答案:

没有答案