我有一个类似这样的关系:一个城市有一对多的建筑;一个建筑物具有零到多个设备。
用户必须能够通过其PK请求城市,作为响应接收城市、城市中的建筑物以及这些建筑物中的设备。
我知道外键在创建模型时是必要的,如下所示:
class City(models.Model):
#Columns here
class Building(models.Model):
cityId = models.ForeignKey(City, on_delete=models.CASCADE)
#Columns here
class Device(models.Model):
buildingId = models.ForeignKey(Building, on_delete=models.CASCADE)
#Columns here
我遇到的问题是如何编写序列化程序和查询。到目前为止,我的序列化程序只包含与该表的列相对应的字段:
class CitySerializer(serializers.ModelSerializer):
class Meta:
model = City
fields = ['id', ...]
class BuildingSerializer(serializers.ModelSerializer):
class Meta:
model = Building
fields = ['id', 'cityId', ...]
class DeviceSerializer(serializers.ModelSerializer):
class Meta:
model = Device
fields = ['id', 'buildingId', ...]
但是,当我必须响应城市的GET请求时,我只知道如何使用嵌套的for循环在通过输入的ID找到城市后获取建筑物和设备数据。我认为有更好的方法,但我在网上很难找到明确的答案。
1条答案
按热度按时间igetnqfo1#
在您模型中使用related_name关键字,您可以了解更多--下面是它工作原理--
1.定义模型并将related_name添加到外键中,作为-
1.然后以相反的顺序定义序列化程序,并在序列化程序字段中添加模型的related_name--
现在当你将设法得到这个城市时,你将得到所有的建筑物rel;以及与每个建筑物相关的所有设备。
还有一个方法叫做serializermethodfield,它在很多领域都很有用,你可以根据自己的选择使用任何一个。
希望这对你有帮助。