【发布时间】:2020-07-02 14:54:47
【问题描述】:
我正在尝试将帖子添加到列表视图,主页列表视图已经有一个项目上下文。
在我的项目中,用户可以添加帖子和添加项目,每个项目都是具有不同模型的不同应用。
所以在我的主页列表视图中,我有我的项目循环,并且在每个项目中,它都显示了与之相关的用户。
我要做的是检查该 item.user 是否有与用户相关的 admin_approved=True 帖子,如果确实存在,则页面中会出现一个按钮显示,链接到包含这些帖子的另一个页面。
因此,如果有零个与用户相关的帖子或可用的帖子但 admin_approved=False 或还没有 admin_approved=True 按钮不应该出现,但如果有 1 个或多个帖子是 @987654324 @按钮应该会出现。
我试图注释查询集,但问题是当用户有 2 个帖子时,一个已获批准,另一个未获批准,2 个项目出现一个带有按钮,一个没有按钮,并且主页列表中发生重复查看
我曾尝试使用 .distinct() 但它不起作用 项目仍然重复
这是models.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)
【问题讨论】:
-
它将为每个
designer__post组合重复相同的Item。
标签: python django django-views