2

Djangoテンプレートのmanytomanyfieldをクエリするにはどうすればよいですか?

たとえば、このifステートメントは機能しません(Djangoテンプレートで引数を使用して関数を呼び出すことができないことはわかっています)が、これは私がやりたいことを示しています。

template.html

{% for post in posts %}
    {% if post.likes.filter(user=user) %}
        You like this post
    {% else %}
        <a>Click here to like this post</a>
    {% endif %}
{% endfor %}

models.py

class User(Model):
    # fields

class Post(Model):
    likes = ManyToManyField(User)
4

2 に答える 2

3

テンプレートにPythonコードを記述しているように見えるため、機能しません...ビューでループを実行して投稿のリストとその情報をテンプレートに渡すか、テンプレートフィルターを記述して特定のユーザーが投稿を気に入っています。例えば:

from django import template

register = template.Library()

@register.filter
def is_liked_by(post, user):
    return bool(post.likes.filter(user=user))

次に、テンプレートで:

{% for post in posts %}
    {% if post|is_liked_by:request.user %}
        You like this post
    {% else %}
        <a>Click here to like this post</a>
    {% endif %}
{% endfor %}
于 2012-07-04T01:36:25.053 に答える
3

あなたが探していることをするために、あなたは以下をすることができます:

{% for post in posts %}
    {% if user in post.likes.distinct %}
        You like this post
    {% else %}
        <a>Click here to like this post</a>
    {% endif %}
{% endfor %}

または、Gregのアプローチを使用することもできます。彼の答えの利点は、非常に大きなデータセットに入ると、より適切にスケーリングできることです。このアプローチでは、カスタムフィルターを作成する必要はありません。

于 2012-07-04T07:37:51.827 に答える