因此,我有一个序列化器,为此添加了一个自定义create
方法,因为我正在使用它为多对多关系插入对象,并且为此使用了嵌套序列化器。
就目前而言,当我尝试使用DocumentSerializer
创建对象时,我遇到了"document":["This field is required."]
错误,因为声明了documentdomain_set
变量时,关联文档尚未被创建,因此在该关系中没有要使用的ID。我显然知道在保存新的document_id
对象之后如何捕获此document
,但是我不确定最好的做法是处理变量初始化。谢谢!
class DocumentDomainSerializer(serializers.ModelSerializer):
domain = serializers.SerializerMethodField('get_domain_id')
class Meta:
model = DocumentDomain
fields = ('document_id', 'domain_id')
class DocumentSerializer(serializers.ModelSerializer):
documentdomain_set = DocumentDomainSerializer(many=True, required=False)
class Meta:
model = Document
fields = ( 'documentdomain_set', 'id', 'text', 'uploaded_at')
extra_kwargs = {
'id': {'read_only': True},
'uploaded_at': {'read_only': True}
}
def create(self, validated_data):
documentdomain_set = documentdomain_set.pop('documentdomain_set', [])
# create document first
document = Document.objects.create(**validated_data)
# serialize associated domains
for documentdomain in documentdomain_set:
# get ID of newly-created document, use for relation
documentdomain['document_id'] = document
DocumentDomain.objects.create(**documentdomain)
return document