Hier erhalten Sie Informationen aus verwandtem Objekt in der generischen Listenansicht
-
13-09-2019 - |
Frage
Also, ich habe noodling über mit Djangos generischen Ansichten, speziell die object_list
Ansicht. Ich habe dies in meinem 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),
)
und diese ziemlich grobe Vorlage, die es geht an:
{% 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 %}
Was ich suche ist die beste Art und Weise idiomatische in dieser Ansicht einschließlich der Unicode-Darstellung und generated
Feld (a DateTimeField
) aus dem letzten Turn
, die in der Schleife auf den aktuellen Game
Punkte , basierend auf dem Wert von generated
. Turn.game
ist das Feld, das auf die Game
weist die wiederum gehört zu (a ForeignKey
).
Update:
Mein Turn
Modell ist wie folgt:
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)
Das Game
Modell aus der Art und Weise nicht wesentlich geändert hat angegeben ich es in diesem andere Frage .
Lösung
Wenn Turn.game
Punkte auf dem Game
Objekt zugeordnet ist, dann sollte {{game.turn_set.all}}
den Satz von Turn
Objekte für das Spiel zurückzukehren.
Sie müssen möglicherweise eine Meta-Klasse zum Turn
Modell hinzufügen von neu nach alt zu bestellen.
Class Meta:
ordering = ['-generated']
Dann {{game.turn_set.all.0}}
sollte die Unicode-Darstellung für die neueste Wendung für das Spiel zurückzukehren, und {{game.turn_set.all.0.generated}}
wird das dazugehörige datetime
Objekt zurück.
. Hinweis: Dies ist ungetestet Code