使用ManyToMany字段的模型方法

时间:2015-11-02 09:03:13

标签: python django

我的模型中有一个方法存在特定问题。我正在构建一个“问答式”网站,比如Stack Overflow。

我有这个模型的答案(隐藏其他字段):

class Answer(models.Model):

    like = models.ManyToManyField(CustomUser, related_name='likes')

    @property
    def total_likes(self):
        return self.like.count()

    @property
    def user_liked(self, request):
        user = request.user
    if self.like.filter(id=user.id).exists():
        return True
    else:
        return False

所以,在我看来,我意识到这个逻辑:当用户点击“喜欢”按钮时,他的对象被添加到like-user表,来自ManyToMany字段;当他再次点击时,他的记录将被删除。

我需要在我的模板中检查下一个逻辑:request.user单击此答案或否。所以我在模型中添加方法,并尝试检查循环:

in view:
answer = Answer.objects.all()
...
{% for item in answer %}
{% if item.user_liked == True %}
...

此方法不起作用。我怎样才能解决这个问题?或许你知道我的问题的其他解决方案?

1 个答案:

答案 0 :(得分:2)

这更适合作为模板标签:

在app文件夹中创建一个名为templatetags的python包,然后创建一个名为custom_tags.py的文件,并在该文件中放置:

from django import template

register = template.Library()

@register.filter()
def user_liked(answer, user):
    is_liked = Answer.objects.filter(id=answer.id, user=user)
    if is_liked:
        return True
    else:
        return False

然后在模板中:

{% load custom_tags %}
{% if item|user_liked:request.user %}