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

2024-10-02 12:29:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试让Django的动态字段序列化程序工作。你知道吗

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

  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

我没有发现任何错误,但当我在浏览器的restapi视图中查看它时,它似乎没有接收到更改。同样,如果我把一个调试器放在带有.update()语句的行的前面,运行.update(),它实际上会返回我期望的结果。

如果有人能指出我做错了什么,我将不胜感激。提前谢谢


Tags: toself程序model序列化initdefupdate

热门问题