从泛型列表视图中获取相关对象的信息
我最近在研究Django的通用视图,特别是object_list
这个视图。在我的urls.py
文件里,我有这样的设置:
from django.conf.urls.defaults import *
from django.views.generic import list_detail
from diplomacy.engine.models import Game
game_info = {
"queryset": Game.objects.filter(state__in=('A', 'P')),
"template_object_name": "game",
}
urlpatterns = patterns('',
(r'^$', list_detail.object_list, game_info),
)
然后我有一个比较粗糙的模板,它将会使用这个视图:
{% block content %}
<table>
<tr>
<th>Name</th>
<th>Turn</th>
<th>Last Generated</th>
</tr>
{% for game in game_list %}
<tr>
<td>{{ game.name }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
我想要的是在这个视图中,最好的方式是包含当前Game
的最新Turn
的unicode表示和generated
字段(这是一个DateTimeField
)。这个Turn
是通过generated
的值来判断的。Turn.game
是指向这个Turn
所属的Game
的字段(这是一个ForeignKey
)。
更新:
我的Turn
模型如下:
SEASON_CHOICES = (
('S', 'Spring'),
('SR', 'Spring Retreat'),
('F', 'Fall'),
('FR', 'Fall Retreat'),
('FB', 'Fall Build')
)
class Turn(models.Model):
game = models.ForeignKey(Game)
year = models.PositiveIntegerField()
season = models.CharField(max_length=2, choices=SEASON_CHOICES)
generated = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return "%s %s" % (self.season, self.year)
而Game
模型和我在另一个问题中描述的没有太大变化。
1 个回答
0
如果 Turn.game
指向相关的 Game
对象,那么 {{game.turn_set.all}}
应该会返回这个游戏的所有 Turn
对象。
你可能需要在 Turn
模型中添加一个 Meta 类,以便按从最新到最旧的顺序排列。
Class Meta:
ordering = ['-generated']
然后,{{game.turn_set.all.0}}
应该会返回这个游戏最新的回合的 unicode 表示,而 {{game.turn_set.all.0.generated}}
则会返回相关的 datetime
对象。
注意:这段代码没有经过测试。