(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 

Я не знаю, правильно ли и точно я описал это, но, пожалуйста, не стесняйтесь оставлять комментарии, и дайте мне знать, если я что-то упустил. Спасибо

Вернуться на верх