我試圖顯示來自幾個通過QuerySet相關的模型的數據。我的最終目標是根據Site模型中sw_delivery_date的日期範圍過濾器顯示Site模型中的一些信息以及Ppack模型中的一些信息。如何顯示相關模型的相關模型中的Django數據?
這裏是我的模型:
class Site(models.Model):
mnemonic = models.CharField(max_length = 5)
site_name = models.CharField(max_length = 100)
assigned_tech = models.ForeignKey('Person', on_delete=models.CASCADE, null = True, blank = True)
hw_handoff_date = models.DateField(null = True, blank = True)
sw_delivery_date = models.DateField(null = True, blank = True)
go_live_date = models.DateField(null = True, blank = True)
web_url = models.CharField(max_length = 100, null = True, blank = True)
idp_url = models.CharField(max_length = 100, null = True, blank = True)
def __str__(self):
return '(' + self.mnemonic + ') ' + self.site_name
class Ring(models.Model):
ring = models.IntegerField()
def __str__(self):
return "6." + str(self.ring)
class Ppack(models.Model):
ppack = models.IntegerField()
ring = models.ForeignKey('Ring', on_delete=models.CASCADE)
def __str__(self):
return str(self.ring) + " pp" + str(self.ppack)
class Code_Release(models.Model):
Inhouse = 'I'
Test = 'T'
Live = 'L'
Ring_Location_Choices = (
(Inhouse, 'Inhouse'),
(Test, 'Test'),
(Live, 'Live'),
)
site_id = models.ForeignKey('Site', on_delete=models.CASCADE)
type = models.CharField(max_length = 1, choices = Ring_Location_Choices, blank = True, null = True)
release = models.ForeignKey('Ppack', on_delete=models.CASCADE)
def __str__(self):
return "site:" + str(self.site_id) + ", " + self.type + " = " + str(self.release)
如果我用下面,
today = datetime.date.today()
future = datetime.timedelta(days=60)
new_deliveries = Site.objects.select_related().filter(sw_delivery_date__range=[today, (today + future)])
我可以得到所有的滿足我的條件,但該網站的模型對象,因爲有沒有從Site到Code_Release的關係(有一對一的來自另一種方式),我無法獲得Code_Release數據。
如果我運行一個for循環,我可以遍歷從上述查詢返回的每個站點,並從Code_Release模型中選擇數據,這使我可以從Ppack和Ring模型中獲取相關數據。
site_itl = {}
itl = {}
for delivery in new_deliveries:
releases = Code_Release.objects.select_related().filter(site_id = delivery.id)
for rel in releases:
itl[rel.id] = rel.release
site_itl[delivery.id] = itl
但是,這似乎對我來說過於複雜,有多個數據庫命中,並可能困難的時間解析通過模板。
基於此,我想我需要從Code_Release模型中進行選擇。這涉及到Site模型和Ppack模型(與Ring模型有關)。我一直在努力以這種方式正確地查詢/訪問數據,以實現我想要的,但我認爲這是正確的方式。
我該如何做到最好?
請澄清 - 目標是檢索一組Code_Release對象?除了那些之外,你還需要什麼關係? –
我希望能夠顯示以下內容: 站點名稱,sw_delivery_date,發佈信息(Ppack模型的str表示形式)和assigned_tech –