У меня есть API, который может создавать тестовые прогоны, но мне нужен серийный номер инструмента для его создания.
Я бы хотел иметь такой запрос POST:
{
"serial_number":"4331214L"
"operator": "John Doe"
}
Но сейчас мне нужно сделать:
{
"instrument": {
"serial_number":"4331214L"
},
"operator": "John Doe"
}
текущих моделей:
class InstrumentModel(models.Model):
class Meta:
db_table = "instruments"
verbose_name = "Instrument"
serial_number = models.CharField(max_length=10, unique=True, db_index=True)
def __str__(self):
return self.serial_number
class TestRun(models.Model):
class Meta:
db_table = "test_runs"
verbose_name = "Test run"
operator = models.CharField(max_length=70)
instrument = models.ForeignKey(InstrumentModel, related_name="instruments", db_column="instrument", on_delete=models.CASCADE)
created_at = models.DateTimeField(db_index=True, default=timezone.now)
Я пробовал с мета-полем глубины.Это не работаетМожет дело не в уровне сериализатора?
class TestRunSerializer(serializers.ModelSerializer):
instrument = InstrumentSerializer()
class Meta:
model = TestRun
fields = ('operator', 'instrument')
depth = 1
def create(self, validated_data):
serial_number = validated_data.pop('serial_number')
instrument, _ = InstrumentModel.objects.get_or_create(serial_number=serial_number)
return TestRun.objects.create(**validated_data, instrument=instrument)