0

Django とプログラミング初心者はこちら。選挙情報アプリを作っているのですが、選挙ページに出馬中の候補者をすべて表示したいのですが、選挙のモデレーターがブロックユーザーを宣言した候補者は表示したくありません。

{% for候補者 inlection.candidate_set.all %} を使用して、選挙で出馬しているすべての候補者のリストを表示できます。ただし、最初に候補がblocked_userかどうかを確認し、blocked_userでない場合にのみ候補を表示したいと思います。以下のテンプレートでわかるように、{% if候補者 inlection.blocked_users.all %} というステートメントを使用できると思いましたが、それはうまくいきません...

申し訳ありませんが、私はとても初心者です。どんな助けでも大歓迎です。

選挙詳細.html

{% for candidate in election.candidate_set.all %}
    {% if candidate in election.blocked_users.all %}
        <!--do nothing-->
    {% else %}    
    <h3>{{ candidate.name }}</h3>
    {% endif %}
{% endfor %}

models.py

class Election(models.Model):
    name = models.CharField(max_length=50)
    description = models.TextField()
    first_voting_day = models.DateField()
    last_voting_day = models.DateField(null=True, blank=True)
    constituency = models.ForeignKey(Constituency)
    offices = models.ManyToManyField(Office)
    moderators = models.ManyToManyField(User, related_name='moderator')
    blocked_users = models.ManyToManyField(User, related_name='blocked_users', blank=True)

    def __unicode__(self):
        return unicode(self.name)

    def get_absolute_url(self):
        return reverse('election_detail', kwargs={'pk': str(self.id)})

編集- 選挙のビューを追加しました

選挙.py

class ElectionDetailView(DetailView):
    model = Election
    context_object_name = "election"
4

2 に答える 2

1

この種のフィルタリングは、代わりにコントローラーで行う必要があります。テンプレートに渡す前に、クエリ内の不適切な候補を除外します。

于 2013-08-16T23:26:05.240 に答える
0

これにより、ビュー内の選挙とのblocked_user関係を持たないすべての候補者が選択されます。

eligible_candidates = election.candidate_set.exclude(id__in = election.blocked_users.all().values_list('id'))

次に、テンプレートで

{% for candidate in eligible_candidates %}
<h3>{{ candidate.name }}</h3>
{% endfor %}

このフィルタリングが頻繁に使用される場合 (DRY)、モデルまたはモデル マネージャのメソッドにこのフィルタリングを移動すると便利です。

于 2013-08-17T15:33:21.933 に答える