如何解决django中模型嵌套表示中的键错误

问题描述 投票:0回答:2

这是我的模特:

class MyModel(models.Model):
    ID = models.ForeignKey(OtherModel,related_name='NewModel', on_delete=models.CASCADE)
    start = models.BigIntegerField()
    duration = models.BigIntegerField(default= 30)
    value = models.IntegerField()

其中OtherModel有2个字段,biginteger和foreignkey。我正在尝试创建MyModel的实例,它给了我一个关键错误。序列化器如下:

class ModifyReadingSerializer(serializers.Serializer):
    duration =  serializers.IntegerField()
    start =  serializers.IntegerField()

class OriginalSerializer(serializers.ModelSerializer):
    timePeriod = ModifyReadingSerializer(source = '*')
    class Meta:
        model = MyModel
        fields = ('timePeriod', 'value',)

并创建它的视图如下所示:

class RegisterValues(generics.ListCreateAPIView):
    ''' GET/POST  urltemp/{ID = pk}'''
    queryset = MyModel.objects.all()
    serializer_class = OriginalSerializer

    def post(self, request, *args, **kwargs):
        s1 = OtherModel.objects.get(mRID=kwargs["pk"])
        a_temp = MyModel.objects.create(
            ID=s1,
            value=request.data["value"],
            duration=request.data["duration"],
            start=request.data["start"],)
        return Response(data=OriginalSerializer(a_temp).data)

我在/urltemp/1 'duration'得到以下错误KeyError。我理解为什么我得到错误但不知道如何修复它同时保持嵌套表示。我可以看到错误是在我创建持续时间的行(我可以在终端中看到它)。

编辑:加入有效期

{
    "timePeriod": {
        "duration": 30,
        "start": 24
    },
    "value": 34,
}
python django serializer
2个回答
3
投票

试试这个片段,

class RegisterValues(generics.ListCreateAPIView):
    ''' GET/POST  urltemp/{ID = pk}'''
    queryset = MyModel.objects.all()
    serializer_class = OriginalSerializer

    def post(self, request, *args, **kwargs):
        s1 = OtherModel.objects.get(mRID=kwargs["pk"])
        a_temp = MyModel.objects.create(
            ID=s1,
            value=request.data["value"],
            duration=request.data["timePeriod"]["duration"],
            start=request.data["timePeriod"]["start"], )
        return Response(data=OriginalSerializer(a_temp).data)

0
投票

该错误似乎与您的模型结构无关。由于这是一个KeyError,问题是request.data没有与关键duration相关的价值。

换句话说,您必须在请求正文中没有名为durantion的字段的情况下调用您的API。

确保您在请求正文中调用API端点,包括您尝试在代码中访问的所有字段,此错误应该消失。

© www.soinside.com 2019 - 2024. All rights reserved.