0

そのため、テンプレートで関連オブジェクトをレンダリングする方法を理解しようとしています。テンプレートのクエリ セットを使用して実行しようとしましたが、完全に間違っている可能性があり、代わりにコンテキストを使用して何かを行う必要があります。いずれにせよ、私は自分が何をすべきかわかりません。

私がしたいこと:

公開されるヒントを含むクエリ セットを取得します。

クエリ セットの助けを借りて、都市のヒントのリストをレンダリングします。リスト自体は、駅とその駅のヒントの数、および特定の地域のヒントの総数です。

テンプレートでレンダリングしたいもの

Uptown (3)
   K-Jah (2)
   Chatterbox FM (1)

Staunton Island (1)
   Lips 106 (1)

私が試したこと:

<table>
    {% for object in object_list %}
    <tr>
        <th>Region</th>
    </tr>
    <tr>
        <td>{{ object.station.region }} </td>
    <tr>
        <th>Station</th>
        <td>{{ object.station.name }}</td>

    {% endfor %}
</table>

これは明らかに間違っており、私はそれを知っています。ループ オーバーし、同じ地域と駅名を数回レンダリングします。地域または駅がループに表示される回数はレンダリングしません。

私は以下のようにモデルをセットアップしています:

models.py

class Tip(models.Model):

    name = models.TextField(verbose_name=_('name'), blank=True, null=True)
    email = models.EmailField(verbose_name=_('email'), max_length=50, blank=True, null=True)
    description = models.TextField(verbose_name=_('description'), blank=True, null=True)
    comment = models.TextField(max_length=255, blank=True, null=True)
    published = models.BooleanField(default=False, verbose_name=_('published'))

class NamedModel(models.Model):
    name = models.CharField(verbose_name=_('name'), max_length=255)

    def __unicode__(self):
            return u'%s' % self.name

class Region(NamedModel):

    def __unicode__(self):
       return u'%s' % self.name

class Station(models.Model):

    name = models.CharField(verbose_name=_('name'), max_length=255)
    phone = models.CharField(verbose_name=_('phone'), max_length=255, blank=True)
    region = models.ForeignKey(Region, verbose_name=_('region'))

    def __unicode__(self):
        return u'%s' % self.name


class StationTip(Tip):
    station = models.ForeignKey(Station, verbose_name=_('station'))

    def __unicode__(self):
        return u'%s' % self.school

クエリ セット:

K-Jah地域=アップタウン

チャターボックス地域 = アップタウン

リップス 106 地域 = スタントン島

StationTip.objects.all().filter(published=True)

クエリセットが返すもの:

[<StationTip: K-Jah>, <StationTip: K-Jah>, <StationTip: Lips 106>, <StationTip: Chatterbox FM>]
4

1 に答える 1

1

使用したいのは、annotate関数と組み合わせたvalues関数です。

from django.db.models import Count
tips = StationTip.objects.filter(published=True).values('station__name', 'station__region').annotate(count=Count('id'))

station.nameこれにより、との一意の組み合わせごとに辞書を含むリストが作成さstation.regionれ、追加のキーcountと出現回数が追加されます。

テンプレートで (tips を object_list として渡す場合):

<table>
    {% for object in object_list %}
    <tr>
        <th>Region</th>
        <th>Station</th>
        <th>Count</th>
    </tr>
    <tr>
        <td>{{ object.station__region}} </td>
        <td>{{ object.station__name }}</td>
        <td>{{ object.count }}</td>
    </tr>

    {% endfor %}
</table>
于 2013-08-01T20:46:21.580 に答える