如何在django中获取两个模型的详细信息



我正在尝试构建一个执行GET请求的api端点,path ->{url}/api/v1/用户/: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)
<<p>

模型描述/strong>UserModel:用户注册的详细信息。EnergyData:一个表,提供使用用户id和供应商进行检查的用户的更多详细信息。PVSystem:连接到Energydata,因此返回具有能量数据和pvstatus的用户的结果。

从上面来看,当api get请求调用时,它应该根据id提供用户的结果,但我希望它不仅显示用户模型上的内容,还显示能源数据模型上的内容(通过使用该用户调用的dsoID和供应商进行检查)

请问我怎么才能做到这一点?我是django的新手。

您可以这样尝试:

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

如果UsersEnergyData是一对一的关系,则可以直接使用url参数中的id查询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__'

最新更新