亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么條件表達式將新項目添加到列表視圖

為什么條件表達式將新項目添加到列表視圖

慕姐8265434 2023-02-15 17:15:15
我正在嘗試將帖子添加到列表視圖,主頁列表視圖已經有一個項目上下文。在我的項目中,用戶可以添加帖子和添加項目,每個都是具有不同模型的不同應用程序。所以在我的主頁列表視圖中,我循環顯示了我的項目,并且在每個項目中,它都顯示了與之相關的用戶。我想做的是檢查此 item.user 是否有admin_approved=True與用戶相關的帖子,如果確實存在,則頁面中會顯示一個按鈕顯示,鏈接到包含這些帖子的另一個頁面。因此,如果有零個與用戶相關的帖子或可用的帖子,但 admin_approved=False按鈕不應 admin_approved=True出現,但如果有 1 個或多個帖子,則admin_approved=True按鈕應該出現。我試圖注釋查詢集,但問題是當用戶有 2 個帖子時,一個已獲批準,另一個未獲批準,2 個項目出現一個帶有按鈕,一個沒有按鈕,并且在主頁列表視圖中發生重復我曾嘗試使用 .distinct() 但它沒有用,項目仍然重復這是模型.pyclass 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 Itemfrom django.db.models import Case, When, BooleanField, Qclass 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)
查看完整描述

1 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

Item它會為每個組合重復每個designer__post,因為您不使用“折疊”功能。

您可以改用子Exists查詢 [Django-doc]

from django.db.models import Exists, OuterRef


class HomeView(ListView):

    model = Item

    paginate_by = 12

    template_name = "home.html"

    ordering = ['-timestamp']


    def get_queryset(self, *args, **kwargs):

        return super().get_queryset(*args, **kwargs).annotate(

            has_post=Exists(

                Post.objects.filter(

                    designer_id=OuterRef('designer_id'),

                    admin_approved=True

                )

            )

        )


查看完整回答
反對 回復 2023-02-15
  • 1 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號