Django REST Framework - ошибка "Must be Device instance" при вызове PUT из javascript

При попытке обновить экземпляр объекта с помощью PUT, используя фреймворк rest, я получаю ошибку: ValueError: Cannot assign "{'id': UUID('954...8b4')}": "DeviceConfig.device" должен быть экземпляром "Device".

view defn:

class DeviceConfigViewSet(viewsets.ModelViewSet):
    #todo: secure
    authentication_classes = []
    queryset = DeviceConfig.objects.all().order_by('device')
    def get_queryset(self):
        device = self.get_renderer_context()["request"].query_params.get('device')
        if device:
            return DeviceConfig.objects.filter(device=Device(device=device))[0:]
        else:
            return self.queryset
    serializer_class = DeviceConfigSerializer

Модель DeviceConfig:

class DeviceConfig(models.Model):
    device = models.OneToOneField(Device,primary_key=True,on_delete=models.CASCADE)
    bpm = models.DecimalField(max_digits=22, decimal_places=3, blank=True, null=True, default=0.5)
    duty = models.DecimalField(max_digits=22, decimal_places=4, blank=True, null=True, default=0.022)
    ledState = models.IntegerField(
        default=255,
        validators=[MaxValueValidator(255), MinValueValidator(0)]
     )
    pressureMax = models.IntegerField( blank=True, null=True, default=70, validators=[MaxValueValidator(255), MinValueValidator(10)])

JS func FE side:

   function formSubmit(){
        var myForm = document.getElementById("config-form");
        var formObj = new FormData(myForm);
        var object = {};
        formObj.forEach(function(value, key){
            object[key] = value;
        });
        object["device"] = DEVICE_UUID;
        const putMethod = {
            method: 'PUT',
            headers: {
            'Content-type': 'application/json; charset=UTF-8' // Indicates the content 
            },
            body: JSON.stringify(object) 
        }
        fetch("http://localhost:81/configs/"+DEVICE_UUID, putMethod);
    }

Я пробовал не отправлять ID устройства с фронт-энда, но он выдает мне 400. Старый поиск в goog не дал мне ничего хорошего на этот раз, но я не совсем уверен, как отправить экземпляр устройства со стороны клиента, кроме как по его pk что я и пробовал

Я разобрался с этим. @JPG помог указать правильное направление, дело было в сериализаторе - я без необходимости ссылался на device, что все портило. Я удалил его из сериализатора и JS, и теперь все работает хорошо. Спасибо, что направили меня в правильном направлении @JPG

Учитывая, что ссылка на ID устройства уже была в url, который я вызывал, нет необходимости передавать ее снова. Я все еще не совсем уверен, как интерпретировать ошибку (за понимание спасибо), но я думаю, что это была попытка присвоить простой UUID там, где нужен был экземпляр Device, который не обрабатывался в моем коде сериализатора, как я думал.

Поздравления

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