尝试发送有效的POST请求。
当我这样发送时,它是有效的:
<div class="tabContainer">
<div class="buttonContainer">
<button onclick="showPanel(this,'red', 0)" style="">Calculate HFOV</button>
<button onclick="showPanel(this,'green', 1)" style="">Calculate Focal Length</button>
<button onclick="showPanel(this,'yellow', 2)">Settings</button>
</div>
<div class="tabPanel" style="display: none; background-color: red;">
<div class="calculateHFOV">
<div class="dataContainer">
<div class="input">input</div>
<div class="fov">fov</div>
<div class="natoTarget">natoTarget</div>
<div class="humanTarget">humanTarget</div>
<div class="objectTarget">objectTarget</div>
</div>
</div>
</div>
<div class="tabPanel" style="display: none; background-color: green;">
<div class="calculateFocalLength">
<div class="dataContainer">
<div class="input">input</div>
<div class="fov">fov</div>
<div class="natoTarget">natoTarget</div>
<div class="humanTarget">humanTarget</div>
<div class="objectTarget">objectTarget</div>
</div>
</div>
</div>
<div class="tabPanel" style="display: block; background-color: yellow;">
<div class="settings">
<div class="dataContainer">
<div class="parameters">parameters</div>
<div class="linePairs">linePairs</div>
<div class="targetSize">targetSize</div>
</div>
</div>
</div>
</div>
响应就是这样,都有效:
{
"name":"but",
"sklad":1
}
但是当我尝试发送此邮件时,请加上“ fence”:
{
"name": "but",
"getsklad": "fence"
}
错误:
{
"name":"but",
"sklad":"fence"
}
在models.py中有这段代码:
Invalid type. The primary key value was expected, str was received.
在serializers.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)
...
和Views.py部分:
class ZaborPostSerializer(serializers.ModelSerializer):
class Meta:
model = Zabor
fields = (
...
'name',
'sklad',
)
我知道在请求中写“ 1”时的意思是“ pk”。但是我该如何发送姓名而不是id / pk?
我是初学者。所以不要因为愚蠢的问题而把我踢开)
答案 0 :(得分:0)
由于您提供的是$charmap = array(
"a" => "1",
"b" => "2",
"c" => "3"
);
$string = "abc";
$string = str_replace(array_keys($charmap), $charmap, $string);
FOREIGN_KEY ,因此您只能使用一种类型(整数,字符串等)按该值进行过滤。
您可以将Sklad
的{{1}}字段设置为主键:
storage
现在您可以直接使用您的字符串值进行过滤。
另一种选择是在视图中进行过滤:
Sklad
请注意,只有在给定class Sklad(models.Model):
storages = (
('fence', 'Забор'),
('sett', 'Тротуарка'),
)
storage = models.CharField(
max_length=10,
choices=storages,
help_text='Name of storage',
default='sett',
primary_key=True
)
字段中只有一个from django.shortcuts import get_object_or_404
from django.http import Http404
class ZaborView(APIView):
def post(self, request):
dataDict = dict(request.data)
try:
sklad = get_object_or_404(Sklad.objects, storage=dataDict['sklad'][0])
serializer = ZaborPostSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({'status': 'Success'})
else:
return Response({'status': 'Failed'})
except Http404:
return Response({'status': 'Failed'})
的情况下,此方法才有效。
如果您有多个,则可以选择第一个,因为您没有提供主键,并且没有其他要过滤的字段:
Sklad
希望有帮助!