DRF: FieldError Cannot resolve keyword 'microcontrollers' into field when trying to join models

Я пытаюсь сериализовать две модели так, чтобы получить поле name из одной и остальные данные из другой. Однако когда я пытаюсь соединить их, я получаю следующую ошибку.

FieldError at /api/CUTAQ/SE1/testdata/
Cannot resolve keyword 'microcontrollers' into field. Choices are: altitude, co, frame, hum, latitude, longitude, microcontroller, microcontroller_id, name, no2, o3, pres, so2, temp, time_received, time_taken

Я довольно новичок в Django и пытаюсь понять, какая часть кода вызывает проблему.

Models.py

class MeasurementsBasic(models.Model):
    microcontroller = models.OneToOneField('Microcontrollers', related_name='measurements_basic', primary_key=True, on_delete=models.CASCADE)
    time_taken = models.DateTimeField()
    time_received = models.DateTimeField(blank=True, null=True)
    frame = models.IntegerField(blank=True, null=True)
    temp = models.FloatField(blank=True, null=True)
    hum = models.FloatField(blank=True, null=True)
    pres = models.FloatField(blank=True, null=True)
    co = models.FloatField(blank=True, null=True)
    no2 = models.FloatField(blank=True, null=True)
    o3 = models.FloatField(blank=True, null=True)
    so2 = models.FloatField(blank=True, null=True)
    latitude = models.DecimalField(max_digits=9, decimal_places=6, blank=True, null=True)
    longitude = models.DecimalField(max_digits=9, decimal_places=6, blank=True, null=True)
    altitude = models.DecimalField(max_digits=9, decimal_places=6, blank=True, null=True)
    name = models.CharField(max_length=30, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'measurements_basic'
        unique_together = (('microcontroller', 'time_taken'),)


class Microcontrollers(models.Model):
    name = models.CharField(max_length=25)
    serial_number = models.CharField(max_length=20, blank=True, null=True)
    type = models.CharField(max_length=15, blank=True, null=True)
    software = models.CharField(max_length=20, blank=True, null=True)
    version = models.CharField(max_length=5, blank=True, null=True)
    date_installed = models.DateField(blank=True, null=True)
    date_battery_last_replaced = models.DateField(blank=True, null=True)
    source = models.CharField(max_length=10, blank=True, null=True)
    friendly_name = models.CharField(max_length=45, blank=True, null=True)
    private = models.IntegerField()
    datetime_updated = models.DateTimeField(db_column='DateTime_Updated')  # Field name made lowercase.

    class Meta:
        managed = True
        db_table = 'microcontrollers'
        verbose_name_plural = "Microcontrollers"

    def __str__(self):
        return self.friendly_name

Serializers.py

class TestData(serializers.Serializer):
    #name from microcontrollers, rest from measurementsbasic
    name = serializers.CharField(max_length=25)
    time_taken = serializers.DateTimeField()
    temp = serializers.FloatField()
    hum = serializers.FloatField()

Views.py

class TestData(generics.ListAPIView):
    serializer_class = TestData

    def get_queryset(self):
        name = self.kwargs['stationName']
        measurements = MeasurementsBasic.objects.filter(microcontrollers__name=name)[:5]

        return measurements

    def list(self, request, *args, **kwargs):
        res = super(TestData, self).list(request, *args, **kwargs)
        res.data = {"station_info": res.data}
        return res

Вы допустили опечатку в методе get_queryset. Вы назвали поле в MeasurementsBasic 'microcontroller' и пытаетесь сделать запрос по полю 'microcontrollers'

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