Ottenere informazioni da oggetto correlato nella visualizzazione elenco generico
-
13-09-2019 - |
Domanda
Quindi, ho Noodling circa con vista generico di Django, in particolare la vista object_list
. Ho questo nel mio 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),
)
e questo modello abbastanza ruvida che sta per:
{% 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 %}
Quello che sto cercando è il modo migliore idiomatica di includere in questa vista della rappresentazione Unicode e campo generated
(un DateTimeField
) dal più recente Turn
che punta alla Game
corrente nel loop , in base al valore di generated
. Turn.game
è il campo che punta alla Game
turn appartiene (un ForeignKey
).
Aggiornamento:
Il mio modello Turn
è la seguente:
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)
Il modello Game
non è sensibilmente cambiato dal modo in cui ho specificato in questo altra domanda .
Soluzione
Se i punti Turn.game
all'oggetto Game
associato, quindi {{game.turn_set.all}}
dovrebbero restituire il set di oggetti Turn
per quel gioco.
Potrebbe essere necessario aggiungere una classe Meta al modello Turn
di ordinare dal più recente al più vecchio.
Class Meta:
ordering = ['-generated']
Poi, {{game.turn_set.all.0}}
dovrebbe restituire la rappresentazione Unicode per il nuovo turno per quel gioco, e {{game.turn_set.all.0.generated}}
restituirà l'oggetto datetime
associato.
. Nota: Questo è codice non testato