سؤال

لذلك، لقد كنت نداخن مع وجهات نظر 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 %}

ما أبحث عنه هو أفضل طريقة اصطلاحية بما في ذلك في هذا الرأي تمثيل Unicode و generated الحقل (أ. DateTimeField) من الأحدث Turn هذا يشير إلى التيار Game في الحلقة، بناء على قيمة generated. Turn.game هو الحقل الذي يشير إلى 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 النموذج لم يتغير بشكل ملحوظ من الطريقة التي حددتها فيها هذا السؤال الآخر.

هل كانت مفيدة؟

المحلول

إذا Turn.game يشير إلى المرتبطة Game كائن، إذن {{game.turn_set.all}} يجب إرجاع مجموعة من Turn كائنات لهذه اللعبة.

قد تحتاج إلى إضافة فئة meta إلى Turn نموذج لطلب من الأحدث إلى الأقدم.

Class Meta:
    ordering = ['-generated']

ثم، {{game.turn_set.all.0}} يجب إرجاع تمثيل Unicode للحصول على أحدث بدوره لهذه اللعبة، و {{game.turn_set.all.0.generated}} سوف تعيد المرتبطة datetime هدف.

ملاحظة: هذا هو رمز غير مختبر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top