Django 如何将查询集中的用户特定对象标记为发送到模板?

Django how to mark user-specific objects in queryset to be sent to template?

Django 世界的新手。我有一个似乎是普遍性的问题,但我找不到关于 Internet.I 需要将 django 查询集传递给模板以显示列表的好的答案。在那些文章对象中,有些可能是用户写的,我想 highlight/star 那些特定的文章。什么是最好的 practice/solution 来实现这一点?

例如:

 class Article(models.Model) :
   article_text = models.CharField(max=32)
   written_by = models.CharField()

所以我可以访问 views.py:

中所有文章的列表
 article_list = Articles.objects.all()

而且我可以按我当前登录的用户过滤所有文章

 my_article = article_list.filter(written_by=current_user)

在模板中我想显示所有文章的列表,但是'star'只有当前登录用户写的文章

所以在我的模板中我想做这样的事情:

{% for article in article_list %}
  {% if article.some_flag %}
        Starred Article
  {% endif %}
{% endfor %}

问题:在views.py中标记'my_articles'的标志some_flag是否有好的方法来注释'article_list'对象?

或者有没有办法通过传递 article_list 和 mylist 并在模板代码中进行查找来在模板中执行此操作? 类似的东西(代码仅供说明):

{% for article in article_list %}
  {% if article.pk in mylist.keys %}
        Starred Article {{ mylist.pk }}
  {% endif %}
{% endfor %}

任何指点都会很有帮助。希望问题清楚。

首先将您的文章模型更改为:

from django.conf import settings

class Article(models.Model) :
    article_text = models.CharField(max=32)
    written_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

接下来在您的模板中检查用户是否与请求的用户相同:

{% for article in article_list %}
    {% if article.written_by == request.user %}
        Starred Article
    {% endif %}
{% endfor %}

而且您似乎有一些 current_user(不知道这个变量是什么,也许是用户的用户名?),如果您真的不想的话,您正在使用它来匹配用户更改您的模型,您可以将其传递到上下文中并写入 {% if article.written_by == current_user %}。但我建议在开发时更改 Article 模型以进一步简化。