我想做点什么
{% if "sumit" in feed.like.person.all %}
但这给了我TemplateSyntaxError
。我怎么能在Djagno做到这一点?
(基本上,我想检查feed.like.person.all中是否存在'sumit')
以下是我的相关模型。
class Feed(models.Model):
name = models.CharField(max_length=120)
text = models.CharField(max_length=1200)
timestamp = models.DateTimeField(auto_now=True, auto_now_add=False)
updated = models.DateTimeField(auto_now=False, auto_now_add=True)
class Like(models.Model):
feed = models.OneToOneField(Feed)
counter = models.PositiveIntegerField()
person = models.ManyToManyField(settings.AUTH_USER_MODEL, null=True, blank=True)
答案 0 :(得分:2)
我认为您打算检查以下内容:
# check if current user likes a feed
{% if request.user in feed.like.person.all %}
但是,如果您要检查多个Feed,则此方法效率低下。对于多个Feed,更好的方法是使用Annotations
中提到的@AKS。
答案 1 :(得分:1)
通过查询每个Feed来检查用户是否喜欢模板中的Feed的方法是非常低效的。
我建议在获取查询集时使用Conditional Expressions
注释每个feed
:
from django.db.models import BooleanField, Case, When, Value
feeds = Feed.objects.all().annotate(
is_liked=Case(
When(like__person=request.user, then=Value(True)),
default=Value(False),
output_field=BooleanField()))
这样,您只能在一个查询中获取所有内容。然后,在模板中,您只需检查Feed上的is_liked
:
{% if feed.is_liked %}You like this.{% endif %}
我还没有真正执行过此查询,但查看文档会有类似的内容。