我在序列化程序中创建了一些虚点源字段。我做的原因是必须显示外键的名称值,而不是pk值。但是,当我试图从前端发布时,djang抛出了如下内容:默认情况下,AssertionError at /api/my-api/ .create()方法不支持可写的虚线源字段。为序列化程序.create() MySerializer编写显式的read_only=True方法,或在虚线源序列化器字段上设置read_only=True.
因此,当我设置read_only = True时,我的POST就会请求null,而每个字段都来自虚线源序列化器字段。
这是我的序列化程序:
class FcaWorksSerializer(serializers.ModelSerializer):
fell_form = serializers.CharField(source="fell_form.name" )
#...
main_type = serializers.CharField(source="main_type.name")
class Meta:
model = FcaWorks
fields = ('id_fca','wkod', 'main_type','fell_form','fell_type','kind',\
'sortiment','vol_drew','use_type','fca_res','ed_izm','vol_les','act_name',\
'obj_type','use_area','indicator','comment','date_report')我怎样才能解决这个问题?
发布于 2021-04-16 07:27:02
从文档来看,有多种处理ForeignKey关系的方法。如果外交关系不是“多对多”,你就不必自己创造方法。在您的情况下,您可以使用以下之一:
然后使用PrimaryKeyRelated字段:
class FcaWorksSerializer(serializers.ModelSerializer):
fell_form = serializers.PrimaryKeyRelatedField(source ="fell_form.name", queryset = ***"""The queryset that fell_form came from"""*** )
#...
main_type = serializers.PrimaryKeyRelatedField(source="main_type.name", queryset = ***"""The queryset main_type came from"""***)当我遇到同样的问题时,这对我起了作用,不过就像前面所说的“多到多”字段一样,您必须显式地编写创建和更新方法。
https://stackoverflow.com/questions/56028267
复制相似问题