我有一个Channel
型号。
在我的观点中,我有以下几行:
def default_channels(request) : return Channel.objects.filter(is_default=True)
def subbed_channels(request): return Channel.objects.filter(subscribers=request.user)
def moderated_channels(request): return Channel.objects.filter(moderators=request.user)
然后
channels = default_channels(request) | subbed_channels(request) | moderated_channels(request)
通常情况下,如果我理解正确的话,这应该返回所有默认的频道,我订阅的频道,或者我适度的频道。但是,如果其中一些过滤器中存在某个通道,则不应多次返回该通道。
但是,由于某种原因,channels
对象会多次返回一些对象。我甚至有一个返回4次的频道!
我该如何调试和解决这个问题?我用的是“|”吗?算错了?
答案 0 :(得分:1)
答案 1 :(得分:0)
使用Q objects更好地完成您想要的工作。在你的情况下:
from django.db.models import Q
channels = Channel.objects.filter(Q(is_default=True) | Q(subscribers=request.user) | Q(moderators=request.user))
应该做的工作。
答案 2 :(得分:0)
channels = default_channels(request) | subbed_channels(request) | moderated_channels(request)
channels = channels.distinct()