python - 如何解决 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,
}
解决方案
试试这个片段,
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)