这是我的模特:
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,
}
试试这个片段,
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)
该错误似乎与您的模型结构无关。由于这是一个KeyError
,问题是request.data
没有与关键duration
相关的价值。
换句话说,您必须在请求正文中没有名为durantion
的字段的情况下调用您的API。
确保您在请求正文中调用API端点,包括您尝试在代码中访问的所有字段,此错误应该消失。