Django REST framework: Объединение таблиц

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

models.py

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)

class MicrocontrollersMeasurements(models.Model):
    microcontroller = models.ForeignKey(Microcontrollers, models.DO_NOTHING, blank=True, null=True)
    measurement = models.ForeignKey(Measurements, models.DO_NOTHING, blank=True, null=True)

class Measurements(models.Model):
    code = models.CharField(max_length=25)
    measurement = models.CharField(max_length=25)
    unit = models.CharField(max_length=25)
    type = models.CharField(max_length=25)

serializers.py

class SourceStationsSerializer(serializers.ModelSerializer):

    def create(self, validated_data):
        pass

    def update(self, instance, validated_data):
        pass

    class Meta:
        model = Microcontrollers
        fields = ['id', 'name']

class StationMeasurementsSerializer(serializers.ModelSerializer):
    
    def create(self, validated_data):
        pass

    def update(self, instance, validated_data):
        pass

    class Meta:
        model = MicrocontrollersMeasurements
        fields = '__all__'

class MeasurementsSerializer(serializers.ModelSerializer):
    station = SourceStationsSerializer()
    stationMeasurements = StationMeasurementsSerializer()

    def create(self, validated_data):
        pass

    def update(self, instance, validated_data):
        pass

    class Meta:
        model = Measurements
        fields = '__all__'

В базе данных создаются идентификаторы для каждого контроллера и измерения. Мой вопрос заключается в том, как я могу объединить эти 3 таблицы, чтобы найти измерения, принадлежащие каждому контроллеру.

ну на самом деле вам не нужны промежуточные модели в django...

class Measurements(models.Model):
    microcontroller = models.ForeignKey(Microcontrollers,related_name="measurements",on_delete=models.DO_NOTHING, blank=True, null=True)
    code = models.CharField(max_length=25)
    measurement = models.CharField(max_length=25)
    unit = models.CharField(max_length=25)
    type = models.CharField(max_length=25)

обратите внимание на related_name='measurements" Теперь скажите,

pic = Microcontrollers.objects.get(id=1) #or any instance of MMicrocontrollers()
measurements_pic = pic.measurements.all() # will get a list of all measurements associated with pic

это "измерения" в pic.measurements.all() здесь - связанное имя. Django создал промежуточную таблицу и все такое прочее... и упростил ее.

Для целей вывода

out = MeasurementsSerializer(measurements_pic,many=True)

выполнит эту работу. Примечание: 'type' - это ключевое слово в python

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