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