Django如何在queryset中标记用户特定的对象来发送到模板?



一个Django世界的新手。我似乎有一个普遍的问题,但我在网上找不到一个好的答案。我需要通过一个django queryset到模板显示一个列表。在这些Article对象中,有些可能是由用户编写的,我想突出显示/标记这些特定的文章。实现这一目标的最佳实践/解决方案是什么?

例如:

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)

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

在我的模板中,我想这样做:

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

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

或者有一种方法可以通过传递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模型以进一步简化。

最新更新