(DRF) Как сделать запрос axios post на вложенный объект с обратным поиском для foreignkey в качестве первичного ключа
Я сделал модель Sample как ForeignKey к двум другим дочерним моделям, а sample_ID как первичный ключ, используя lookup_field.
models.py
class Sample(models.Model):
sample_ID = models.CharField(max_length=10)
class Label(models.Model):
AI_sample = models.ForeignKey(Sample, null=True, on_delete=models.CASCADE, related_name='AI_sample')
AI_position = models.CharField(max_length=50)
AI_defect = models.CharField(max_length=50)
AI_tool = models.CharField(max_length=50)
class Manual(models.Model):
manual_sample = models.ForeignKey(Sample, null=True, on_delete=models.CASCADE, related_name='manual_sample')
manual_position = models.CharField(max_length=50)
manual_defect = models.CharField(max_length=50)
manual_tool = models.CharField(max_length=50)
Теперь моя конечная точка API выглядит следующим образом:
{
"id": 3,
"sample_ID": "a000001",
"AI_sample": [
{
"id": 3,
"AI_position": "Position 1",
"AI_defect": "Defect 1",
"AI_tool": "Tool 1"
}
],
"manual_sample": [
{
"id": 8,
"manual_position": "Position 3",
"manual_defect": "Scratch",
"manual_tool": "Tool 2"
}
]
}
В настоящее время я использую обратный поиск foreignKey для получения дочерних данных из sample_ID. Теперь я могу легко сделать запрос GET, уничтожив данные следующим образом:
axios.get(url)
.then(resp => {
let data = [];
const manual_sample = resp.data.manual_sample;
manual_sample.forEach(el => {
data.push({
id: el.id,
manual_position: el.manual_position,
manual_defect: el.manual_defect,
manual_tool: el.manual_tool
});
});
})
Однако я не могу сделать запрос POST из дочерних данных, потому что я не могу установить первичный ключ sample_ID во вложенном объекте. Я посылаю запрос данных manual_sample следующим образом:
{
"id": 9,
"manual_position": "Position 5",
"manual_defect": "Crack",
"manual_tool": "Tool 4"
}
Теперь, есть ли возможное решение, чтобы сделать POST запрос из manual_sample данных под sample_ID: a000001.
Вот мои serializers.py и views.py, если вам интересно:
serializers.py
class LabelSerializer(serializers.ModelSerializer):
class Meta:
model = Label
fields = ['id', 'AI_position', 'AI_defect', 'AI_tool']
class ManualSerializer(serializers.ModelSerializer):
class Meta:
model = Manual
fields = ['id', 'manual_position', 'manual_defect', 'manual_tool']
class SampleSerialier(serializers.ModelSerializer):
AI_sample = LabelSerializer(many=True, read_only=True)
manual_sample = ManualSerializer(many=True, read_only=True)
class Meta:
model = Sample
fields = ['id', 'sample_ID', 'AI_sample', 'manual_sample']
views.py
class SampleViewSet(viewsets.ModelViewSet):
queryset = Sample.objects.all()
serializer_class = SampleSerialier
lookup_field = "sample_ID"
class LabelViewSet(viewsets.ModelViewSet):
queryset = Label.objects.all()
serializer_class = LabelSerializer
class ManualViewSet(viewsets.ModelViewSet):
queryset = Manual.objects.all()
serializer_class = ManualSerializer
Я не знаю, правильно ли и точно я описал это, но, пожалуйста, не стесняйтесь оставлять комментарии, и дайте мне знать, если я что-то упустил. Спасибо