Получить информацию из связанного объекта в виде общего списка.

StackOverflow https://stackoverflow.com/questions/1269625

Вопрос

Итак, я баловался общими представлениями 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 %}

Я ищу лучший идиоматический способ включения в это представление представления Юникода и generated поле (а DateTimeField) из самый последний Turn это указывает на текущий Game в цикле, на основе значения generated. Turn.game это поле, которое указывает на Game ход принадлежит (a 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 модель существенно не изменилась по сравнению с тем, как я ее указал в это другой вопрос.

Это было полезно?

Решение

Если Turn.game указывает на связанный Game объект, тогда {{game.turn_set.all}} должен вернуть набор Turn предметы для этой игры.

Возможно, вам придется добавить мета-класс в Turn Модель на заказ от самой новой к самой старой.

Class Meta:
    ordering = ['-generated']

Затем, {{game.turn_set.all.0}} должен вернуть представление в Юникоде для новейшего хода этой игры и {{game.turn_set.all.0.generated}} вернет связанный datetime объект.

Примечание:Это непроверенный код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top