簡體   English   中英

在 django 過濾器之上使用 annotate()

[英]Using annotate() on top of django filters

是否可以在 Django 過濾器上使用注釋? 我不是指 django 文檔中的 filter() 而是 django-filters。

這樣的事情給了我一個屬性錯誤,說過濾器沒有屬性注釋。

如果您需要其他代碼,請告訴我

視圖.py

post = postFilter(request.GET, queryset=BlogPost.objects.exclude((Q(author_id__in=request.user.blocked_users.all()) | Q(author = request.user))).order_by('date_updated')).annotate(user_has_interest=Case(When(interest__user=request.user, then=Value(True)), default=False, output_field=BooleanField()))

django-filter實例postFilter沒有任何名為 annotate 的屬性,但查詢集確實有它。 您可以像這樣添加查詢集參數:

post = postFilter(
    request.GET,
    queryset=BlogPost.objects.exclude(
            Q(author_id__in=request.user.blocked_users.all() |
            Q(author = request.user)
        ).order_by('date_updated').annotate(
            user_has_interest=Case(
                When(interest__user=request.user, then=Value(True)),
                default=False, output_field=BooleanField()
            )
        )
    )
)

或者您可以稍后將其添加到過濾器的qs屬性中。 例如:

post = postFilter(request.GET, queryset=BlogPost.objects.exclude((Q(author_id__in=request.user.blocked_users.all()) | Q(author = request.user))).order_by('date_updated'))

post_qs = post.qs.annotate(user_has_interest=Case(When(interest__user=request.user, then=Value(True)), default=False, output_field=BooleanField()))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM