wgf*_*242 10 python django django-serializer django-rest-framework
我的数据是这样的,我想序列化它们而不为它们创建模型。
[
{'form': 1, 'count': 1},
{'form': 2, 'count': 3}
]
Run Code Online (Sandbox Code Playgroud)
序列化到
[
{'form': 'my form name 1', 'count': 1},
{'form': 'my form name 2', 'count': 3}
]
Run Code Online (Sandbox Code Playgroud)
我想用序列化器序列化它,通过 pk 获取表单名称表单模型。
[
{'form': 1, 'count': 1},
{'form': 2, 'count': 3}
]
Run Code Online (Sandbox Code Playgroud)
一些错误,例如'int' object has no attribute 'pk'
在python控件中测试
[
{'form': 'my form name 1', 'count': 1},
{'form': 'my form name 2', 'count': 3}
]
Run Code Online (Sandbox Code Playgroud)
Aks*_*ngh 11
您想要的,可以通过进行以下更改来实现。
class EavForm(models.Model):
name = models.CharField(max_length=300)
order = models.IntegerField(default=1)
# serializer
class EvaFormPKRelatedField(PrimaryKeyRelatedField):
def get_queryset(self):
return EavForm.objects.all()
def to_representation(self, value):
return value.name
class CustomSerializer(serializers.Serializer):
form = EvaFormPKRelatedField()
count = serializers.IntegerField()
# Assume EvaForm exist of id 1 and 2
data = [{'form': 1, 'count': 1}, {'form': 2, 'count': 1}]
s = CustomSerializer(data=data, many=True)
print(s.data)
""" Output
[
{'form': 'my form name 1', 'count': 1},
{'form': 'my form name 2', 'count': 3}
]
"""
print(s.validated_data)
""" Output
[
{'form': <EvaForm: Evaform object (1)>, 'count': 1},
{'form': <EvaForm: Evaform object (2)>, 'count': 3}
]
"""
Run Code Online (Sandbox Code Playgroud)
请注意,.data和的输出发生了变化.validated_data。
.data将通过调用方法为您提供PrimaryKeyRelatedField.to_representation()的值。
.validated_data将通过调用方法为您提供PrimaryKeyRelatedField.to_internal_value()的值。因为,经过验证的数据通过调用所有验证来获取每个字段的值,并且在运行验证之前,内部将通过调用其to_internal_value()方法来更新每个字段值,并且该值用于验证过程。
| 归档时间: |
|
| 查看次数: |
20302 次 |
| 最近记录: |