【发布时间】:2019-12-19 10:20:20
【问题描述】:
尝试发送有效的 POST 请求。
当我这样发送时它会起作用:
{
"name":"but",
"sklad":1
}
响应是这样的,一切都是有效的:
{
"name": "but",
"getsklad": "fence"
}
但是当我尝试发送这个时,使用“栅栏”:
{
"name":"but",
"sklad":"fence"
}
出现错误:
Invalid type. The primary key value was expected, str was received.
在models.py中有这段代码:
class Sklad(models.Model):
storages = (
('fence', 'Забор'),
('sett', 'Тротуарка'),
)
storage = models.CharField(
max_length=10,
choices=storages,
help_text='Name of storage',
default='sett'
)
class Zabor(models.Model):
sklad = models.ForeignKey(Sklad, on_delete=models.CASCADE)
name = models.CharField(max_length=10)
...
这在 serializers.py 中:
class ZaborPostSerializer(serializers.ModelSerializer):
class Meta:
model = Zabor
fields = (
...
'name',
'sklad',
)
和 Views.py 部分:
class ZaborView(APIView):
def post(self, request):
serializer = ZaborPostSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({'status': 'Success'})
else:
return Response({'status': 'Failed'})
我知道当我在请求中写“1”时,这意味着“pk”。但是我如何发送名称而不是 id/pk?
我是初学者。所以不要因为愚蠢的问题而狠狠地踢我)
【问题讨论】:
标签: python-3.x api post serialization django-rest-framework