首页 > 解决方案 > 如何解决 django 中模型嵌套表示中的关键错误

问题描述

这是我的模型:

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'. 我理解为什么我会收到错误,但不确定如何在维护嵌套表示的同时修复它。我可以看到错误出现在我创建持续时间的行中(我可以在终端中看到它)。

编辑:添加了有效载荷

{
    "timePeriod": {
        "duration": 30,
        "start": 24
    },
    "value": 34,
}

标签: pythondjangoserialization

解决方案


试试这个片段,

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)

推荐阅读