我定义了下面这样的序列化程序。我正在使用mixin动态更改显示字段。在
class SerializerTwo(serializers.ModelSerializer):
class Meta:
model = Two
fields = ('name', 'contact_number')
class SerializerOne(DynamicFieldsModelSerializer, serializers.ModelSerializer):
another_field = SerializerTwo()
class Meta:
lookup_field = 'uuid'
model = One
fields = ('status', 'another_field',)
现在我想做的是,动态传递(动态)serializerwo中所有字段将被使用的内容,就像我为SerializerOne所做的那样。在
我为SerializerOne做这件事的方式是:
^{pr2}$有没有一种方法,可以用来将serializerwo中的字段添加到上面的序列化程序初始化中。在
# where fields=('status', 'name') name from SerializerTwo
# the double underscore notation does not work here for fields, so another_field__name cannot be used as well
SerializerOne(queryset, fields=fields)
我使用以下方法来实现所谓的
Nested Serializer Dynamic Model Fields
。在我们对
^{pr2}$DynamicFieldsModelSerializer
做了一些修改所以最后一个问题是如何组织url,将
GET
url写成这样:domain/something?one_fields=name,contact_number&two_fields=another_field
@Lotram的答案对返回多个值的字段无效(通过
many=True
)。在以下代码改进了@Lotram的解决方案,该方案适用于返回多个值的字段:
在遇到同样的问题后,我找到了一个解决办法,希望这能对一些人有所帮助。我修改了定义为here的DynamicFieldsModelSerializer
之后,您可以这样使用它:
^{pr2}$您可以修改我的解决方案以使用双下划线,而不是另一个带有dict的kewyord,但我希望将常规字段与嵌套序列化程序分开。在
它也可以改进为递归的,这里我只处理一个嵌套序列化器的深度
编辑 我修改了代码,使用了双下划线语法:
然后您可以这样使用它:
相关问题 更多 >
编程相关推荐