【发布时间】:2020-12-04 03:02:51
【问题描述】:
上下文
我目前在我的数据库中存储了“Building”和“Room”对象 - 由外键链接。
我正在尝试使用 for 循环和 objects.filter() 为每个 Building 生成 Room 查询集
问题
请参阅下面发布的代码 - 我似乎无法解决一个看似简单的问题。
'BuildingList' 返回两个对象,但由于某种原因,我的 for 循环仅查询并为两个建筑物之一附加一个“RoomList”。 (第二个)
我不明白为什么,但是 RoomList = Room_Data.objects.filter(Room_Building=b) 似乎破坏了我基本 for 循环的逻辑和流程。
Python 脚本:
#
#
# 1.) GET DATA FOR RELEVANT SET OF BUILDINGS
FusionBuildingName = "Renal Dialysis Unit x6"
BuildingRoomLists = []
# GET DATA FOR ALL BUILDINGS MATCHING 'FusionBuildingName'
BuildingList = Building_Data.objects.filter(Building_Name=FusionBuildingName)
print(len(BuildingList))
print(BuildingList)
# GENERATE BUILDING ROOM LISTS
for b in BuildingList:
print(b)
print("Building Author: " + b.Building_Author)
print("Building Room List:")
# GET LIST OF ROOM OBJECTS FOR CURRENT BUILDING
RoomList = Room_Data.objects.filter(Room_Building=b)
print(str(RoomList))
# APPEND LIST OF ROOM OBJECTS TO BUILDING ROOM LIST
BuildingRoomLists.append(RoomList)
以下是我的 Python Shell 在运行上述代码时返回的内容:
In [43]:
In [44]: ...: ...: ...: ...: ...: ...: ...: Building_Data object (1)
1
Building Author : Angel Mahchut
Building_Data object (2)
2
Building Author : AusHFG
In [45]: Building Room List:
In [46]:
In [46]:
In [46]:
In [47]:
In [48]:
In [48]:
In [48]: <QuerySet [<Room_Data: Room_Data object (41)>, <Room_Data: Room_Data object (42)>, <Room_Data: Room_Data object (43)>, <Room_Data: Room_Data object (44)>, <Room_Data: Room_Data object (45)>, <Room_Data: Room_Data object (46)>, <Room_Data: Room_Data object (47)>, <Room_Data: Room_Data object (48)>, <Room_Data: Room_Data object (49)>, <Room_Data: Room_Data object (50)>, <Room_Data: Room_Data object (51)>, <Room_Data: Room_Data object (52)>, <Room_Data: Room_Data object (53)>, <Room_Data: Room_Data object (54)>, <Room_Data: Room_Data object (55)>, <Room_Data: Room_Data object (56)>, <Room_Data: Room_Data object (57)>]>
In [49]:
In [49]:
In [50]:
尽管循环遍历 2 个建筑对象,但“Building Room List:”和“ 非常感谢任何帮助。我已经在这个问题上停留了一段时间......
【问题讨论】:
-
Room_Data.Room_Building是Building_Data的外键字段吗? 2个模型类之间的关系是什么? -
是的,我已将其设置为一对(建筑物)对多(房间)关系,并在
Room_Data模型类中使用以下行:Room_Building = models.ForeignKey(Building_Data, on_delete=models.CASCADE)
标签: python django for-loop filter