我试图完成一个简单的任务,提取从POST请求传递的值,并将其用作覆盖的create方法中的参数。
这是示例POST请求主体JSON,并"文档化";是我要提取的字段。
### POST
{
"url": "aaaa",
"title": "bbbb",
"publisher": "bbbb",
"desc": "bbbb",
"summary": "bbbb",
"documentId": "onDKe6K"
}
使用validated_data.pop("documentId")
是最明显的选择。但是,我需要DocumentListingField
设置为read_only=False才能使用此方法。这个选项引起了更大的问题,因为我的Document模型有一个不容易序列化的Hashfield。
- validated_data.get("documentId"
- validated_data("documentId"
serializers.py
from django.forms.models import model_to_dict
class DocumentListingField(serializers.RelatedField):
def to_representation(self, instance):
return model_to_dict(instance.document)
class MySourceSerializer(serializers.ModelSerializer):
Document = DocumentListingField(many=False, read_only=True)
class Meta:
model = MySource
fields = (
"id",
"url",
"title",
"publisher",
"desc",
"summary",
"Document",
)
def create(self, validated_data):
documentId = validated_data.get("documentId"). <========= LINE OF INTEREST
print(documentId)
source = MySource.objects.create(
document=Document.objects.get(id=documentId), **validated_data
)
print(validated_data)
source.save()
return source
我认为可以在序列化器中设置documentId
字段。
class MySourceSerializer(serializers.ModelSerializer):
Document = DocumentListingField(many=False, read_only=True)
documentId = serializers.CharField(write_only = True)
lass Meta:
model = MySource
fields = (
...
"documentId",
)