我有一个名为ExampleModelCreateSerializer
的ModelSerializer,它接受模型字段的数据。但是,我想传递不属于模型的其他数据。具体来说,我想包括一个不同模型的主键列表。为此,我使用serializers.PrimaryKeyRelatedField(many=True)
当我试图提交POST请求时,出现了这个错误。
Got a `TypeError` when calling `examplemodel.objects.create()`. This may be because you have a writable field on the serializer class that is not a valid argument to `examplemodel.objects.create()`. You may need to make the field read-only, or override the ExampleModelCreateSerializer.create() method to handle this correctly.
我假设这是因为试图保存到模型实例中的附加字段。所以我试着在序列化程序运行有效后弹出字段。你知道吗
def create(self, request, *args, **kwargs):
...
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.validated_data.pop('listofkeys')
...
返回'examplemodel' object has no attribute 'listofkeys'
我所要做的只是将其他字段传递给这个序列化程序,而不要让这些字段与模型实例的保存和创建冲突。你知道吗
我已经阅读了其他关于类似问题的答案,将这些字段设置为只读,但这是否只适用于GET请求?我需要这些额外的字段提交通过邮政和处理的序列化程序。你知道吗
注意:Serializer类还扩展了WriteableNestedModelSerializer
编辑:尝试在序列化程序创建中弹出它,但产生相同的AttributeError
class ExampleModelCreateSerializer(WritableNestedModelSerializer):
listofkeys = serializers.PrimaryKeyRelatedField(
many=True,queryset=models.another_model.objects.all())
def create(self, validated_data):
...
listofkeys = validated_data.pop('listofkeys')
instance = super(ExampleModelCreateSerializer, self).create(validated_data)
return instance
class Meta:
model = example_model
fields = ('field1', 'field2', ..., 'listofkeys', )
目前没有回答
相关问题 更多 >
编程相关推荐