我正在尝试将帖子添加到列表视图,主页列表视图已经有一个项目上下文。
在我的项目中,用户可以添加帖子和添加项目,每个都是具有不同模型的不同应用程序。
所以在我的主页列表视图中,我循环显示了我的项目,并且在每个项目中,它都显示了与之相关的用户。
我想做的是检查此 item.user 是否有admin_approved=True与用户相关的帖子,如果确实存在,则页面中会显示一个按钮显示,链接到包含这些帖子的另一个页面。
因此,如果有零个与用户相关的帖子或可用的帖子,但 admin_approved=False按钮不应 admin_approved=True出现,但如果有 1 个或多个帖子,则admin_approved=True按钮应该出现。
我试图注释查询集,但问题是当用户有 2 个帖子时,一个已获批准,另一个未获批准,2 个项目出现一个带有按钮,一个没有按钮,并且在主页列表视图中发生重复
我曾尝试使用 .distinct() 但它没有用,项目仍然重复
这是模型.py
class Post(models.Model):
designer = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100, unique=True)
admin_approved = models.BooleanField(default=False)
这是意见
from .models import Item
from django.db.models import Case, When, BooleanField, Q
class HomeView(ListView):
model = Item
paginate_by = 12
template_name = "home.html"
ordering = ['-timestamp']
def get_queryset(self):
has_post = Case(
When(Q(designer__post__isnull=False) & Q(designer__post__admin_approved=True), then=True),
default=False,
output_field=BooleanField()
)
return super().get_queryset().annotate(has_post=has_post).distinct()
这是模板
{% for item in object_list %}
{{ item.title }}
{% if item.has_post %}
SHOW BUTTON
{% else %}
HIDE BUTTON
{% endif %}
{% endfor %}
这是项目模型
class Item(models.Model):
designer = models.ForeignKey(
User, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
翻过高山走不出你
相关分类