Как получить данные из двух моделей в django

Я пытаюсь создать конечную точку api, которая выполняет запрос GET, путь -> {url}/api/v1/users/:id

У меня есть три модели

class PvSystem(models.Model):
   modelNo = models.CharField(max_length=10, blank=False, default='')
   modelName = models.CharField(max_length=10, blank=False, default='')
   dimensionPanel: models.FloatField(max_length=10, blank=False, default=NULL)
   elevation = models.FloatField(max_length=10, blank=False, default=NULL)
   kwhPeak = models.FloatField(max_length=10, blank=False, default=NULL)
   avergaeSurplus = models.FloatField(max_length=10, blank=False, default=NULL)

class EnergyData(models.Model):
   pvId = models.ForeignKey(PvSystem,related_name='orders',on_delete=models.CASCADE)
   energyNeeded = models.FloatField(max_length=10, blank=False, default=NULL)
   energyConsumption = models.FloatField(max_length=20, blank=False, default=NULL)
   energyProduction = models.FloatField(max_length=20, blank=False, default=NULL)
   energySurplus = models.FloatField(max_length=20, blank=False, default=NULL)
   floorPrice = models.FloatField(max_length=10, blank=False, default=NULL)
   capPrice = models.FloatField(max_length=10, blank=False, default=NULL)
   pvStatus = models.BooleanField(blank=False, default=False)
   dsoId = models.CharField(max_length=70, blank=False, default='')
   supplier = models.CharField(max_length=70, blank=False, default='')

class User(models.Model):
   name = models.CharField(max_length=70, blank=False, default='')
   email = models.EmailField(max_length=70, blank=False, default='')
   password = models.CharField(max_length=70, blank=False, default='')
   address = models.CharField(max_length=70, blank=False, default='')
   roleId = models.IntegerField(blank=False, default='1')
   isActive = models.BooleanField(blank=False, default=TRUE)
   dsoId = models.CharField(max_length=70, blank=False, default='')
   supplier = models.CharField(max_length=70, blank=False, default='')
   dateJoined = models.DateTimeField(auto_now_add=False, blank=False, default=NULL)

Описание моделей

UserModel: Зарегистрированные данные пользователя. EnergyData: Таблица, которая предоставляет более подробную информацию о пользователе, используя для проверки dsoID пользователя и поставщика. PVSystem: Подключается к Energydata, следовательно, возвращает результат пользователя с данными об энергии и pvstatus TRUE.

Из вышесказанного следует, что при вызове api get request, он должен выдать результат пользователя в зависимости от id, но я хочу, чтобы он показывал не только содержимое модели пользователя, но и содержимое модели энергетических данных (выполняя проверку с использованием dsoID и поставщика этого вызванного пользователя)

Пожалуйста, как я могу этого добиться? Я новичок в django.

Вы можете попробовать сделать это следующим образом:

user = User.objects.get(dsoId=id)#I am assuming dsoId as primary key
enrgydata = EnergyData.objects.get(dsoId=user.dsoId) 

Если отношение между Users и EnergyData является один-к-одному, то вы можете напрямую использовать id из параметра url для запроса таблицы EnergyData. Если отношение один-ко-многим или много-ко-многим, то необходимо выполнить действия, описанные выше.

class EnergyDataSerializer(serializers.ModelSerializer):
    def profile_info(self, obj): 
        prof_obj= User.objects.get(dsoId=obj.dsoId)

        # access the fields or serialize the data if you can in other way. I am simply returning it in key:value
        return {'id':prof_obj.id, 'name':prof_obj.name, 'email': prof_obj.email}

    profile = serializers.SerializerMethodField('profile_info')
    class Meta:
            model = EnergyData
            fields ='__all__'
Вернуться на верх