我的模型中有一个方法存在特定问题。我正在构建一个“问答式”网站,比如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 %}
...
此方法不起作用。我怎样才能解决这个问题?或许你知道我的问题的其他解决方案?
答案 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 %}