我有一个4种型号,它是内容,过滤器,contentFilter,用户。

问题描述 投票:0回答:0
可以使用(x)的忽略用户创建过滤器。 1,2,3的符号与滤波器X具有关系。

现在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

    

django django-models django-orm
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.