发布到Django rest framework API,但始终得到“This field is required”

2024-09-28 21:56:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Django rest framework3.2.1,GET很完美,但是{}不能工作。在

这是模型:

class Sample(models.Model):
    ownerBuilding = models.ForeignKey(Building)
    coordinateX = models.IntegerField(default=0, help_text='X coordinate for this sampling point located in a building')
    coordinateY = models.IntegerField(default=0, help_text='Y coordinate for this sampling point located in a building')
    creation_Time = models.DateTimeField(auto_now_add=True)
    description = models.TextField(null=True,
                               help_text='additional description for this sample point.')

class Meta:
    unique_together = ('ownerBuilding', 'coordinateX','coordinateY')

def __str__(self):
    return "Sample for building " + str(self.ownerBuilding)

序列化程序:

^{pr2}$

观点:

class SampleList(generics.ListCreateAPIView):
    queryset = Sample.objects.all()
    serializer_class = SampleSerializer
    permission_classes = (permissions.IsAuthenticated, IsTechniciansGroupOrReadOnly,)

    def get_queryset(self):
        queryset = Sample.objects.all()
        ownerBuildingId = self.request.query_params.get('ownerBuildingId', None)

        if ownerBuildingId is not None:
            queryset = queryset.filter(ownerBuilding=ownerBuildingId)

        return queryset

当我用数据测试此API的POST时:

{"ownerBuilding":"http://rest.xxxxxxxx.xyz:8090/buildings/1/","coordinateX":33,"coordinateY":44,"description":"5dfadfasdfsadf5"}

我总是得到这样的错误:

{
    "ownerBuilding": [
        "This field is required."
    ]
}

有人能帮忙吗?在

http://rest.xxxxxxxx.xyz:8090/buildings/1/存在。在

[编辑0]: 如果我POST与:

{"coordinateX":33,"coordinateY":44,"description":"5dfadfasdfsadf5"}

我还是得到同样的结果。在


Tags: sampletextselfrestformodelshelpdescription
1条回答
网友
1楼 · 发布于 2024-09-28 21:56:08

序列化程序字段是required by default。在

此外,DRFModelSerializer(和HyperlinkedModelSerializer)为所有模型的unique_together添加了UniqueTogetherValidators。这隐式地使约束中的所有字段都是必需的,但为其设置了默认值的字段除外。见doc。在

ownerBuilding在序列化程序上是只读的:

ownerBuilding = serializers.HyperlinkedRelatedField(many=False, \
                            read_only=True, view_name='building-detail')

但您不提供defualt,也不手动设置值,因此此字段被视为空,因此会显示错误消息。在

删除read_only或设置默认值。在

相关问题 更多 >