现在X看到4,5,Y看到1,2,3,4,5
我现在正在做的是,基于用户要求找到哪些过滤器与它们有关的。 然后查询通过表(
ContentFilter
filters = Filter.objects.filter(Q(added_user=user)|(Q(ignored_user=user))
excluded_contents = list(ContentFilter.objects.filter(filter__in=filters).values_list('id',flat=True))
contents = Contents.objects.exclude(id__in=excluded_contents)
问题
我想要一种方法,以便过滤器可以根据每个用户的top
ContentFilter
过滤订单并过滤QuerySet。 例如,对于所有用1个过滤器的用户,可以阻止内容1(忽略用户具有所有用户的过滤器X) 但是在
ContentFilter
中的手册_erder为0。
在第二个过滤器中,所有具有真实充电状态的用户都可以看到此内容。(过滤器y添加的用户具有所有用户和收费状态真实。) 并且在ContentFilter
中具有1.
的手册_erder。我认为我可以使用for循环来检查所有内容,并根据包括该用户的过滤器选择其中的最高内容,但既消耗时间又是资源。 我更喜欢不使用RAW SQL,但是我不确定是否有使用DjangoOrm
有办法
ContentFilter
然后我创建一个子查询,以分配每个内容具有访问值(如果在其上应用了任何过滤器。)
filters = Filter.objects.filter(Q(added_user=user)|(Q(ignored_user=user))
current_used_filters = ContentFilter.objects.filter(
Q(filter__in=user_filters),
content=OuterRef('pk')
).order_by('-manual_order')
blocked_content_list = Content.objects.annotate(
access=Subquery(
current_used_filters.values('access')[:1]
)
).filter(access=False).values_list('id', flat=True)
这意味着此内容具有带有高手动顺序的过滤器,可为该特定用户阻止它。
因此,现在我有了内容ID的列表,现在我可以将其排除在所有内容中。
所以是:
False