顯示對象的名單上有論文型號:在Django中如何通過一年
class Year(models.Model):
name = models.CharField(max_length=15)
date = models.DateField()
class Period(models.Model):
name = models.CharField(max_length=15)
date = models.DateField()
class Notice(models.Model):
year = models.ForeignKey(Year)
period = models.ForeignKey(Period, blank=True, null=True)
text = models.TextField()
order = models.PositiveSmallIntegerField(default=1)
在我看來,我想顯示的年度和期間下令所有通告,但我不希望如果通知的年份和/或期限與上次相同,則重複該通知。我想這種結果:
1932至40年
盛夏從通知4 ...從通知
文字Lorem存有從通知1 ...
文字Lorem存有從通知2 ...
月
- 文字Lorem存有...
1950年
月
- 文字Lorem存有
等
我找到了一個解決方案通過遍歷所有的行內置嵌套列表如下:
years = [('1932-1940', [
('Mid-summer', [Notice1, Notice2]),
('September', [Notice3])
]),
('1950', [
('January', [Notice4])
])
]
這裏的視圖代碼:
years = []
year = []
period = []
prev_year = ''
prev_period = ''
for notice in Notice.objects.all():
if notice.year != prev_year:
prev_year = notice.year
year = []
years.append((prev_year.name, year))
prev_period = ''
if notice.periode != prev_period:
prev_period = notice.periode
period = []
if prev_period:
name = prev_period.name
else:
name = None
year.append((name, period))
period.append(notice)
但這是緩慢而不雅的。有什麼好辦法做到這一點?
如果我可以在模板中設置一些變量,我只能遍歷所有的通知,並且只通過檢查它們是否與前一個相同來打印年份和期間。但是不可能在模板中設置一些臨時變量。
謝謝,那就是我一直在尋找的!現在我只需要確保我的結果在傳遞給模板之前是正確的順序。 – Etienne 2009-08-20 19:30:48