我使用django-autocomplete-light,我希望用户能够在自动完成字段中使用项目编号、项目负责人或项目标题来搜索项目。
只要我添加第三行"| Q",我就会在结果列表中多次获得相同的对象。我从名字和项目ID开始-在那里我可以通过添加"if isdigit()"来解决问题。但是现在我想在项目标题中添加额外的搜索。同样,添加带有"| Q"选项的第三行会导致某些项在结果集中出现多次(3-5次)。
有什么想法吗?我能解决这个问题吗或者至少能减少结果集只显示每个对象一次?
谢谢!:)
class SearchProjectAutocomplete(autocomplete.Select2QuerySetView):
#todo: bug that show results 4-5 times when searched in titel
def get_queryset(self):
qs = PubmaPublikation.objects.filter(typid__in=[222,223,224]).filter(zeigen=1)
qs = qs.order_by('-erstellungsdatum')
qs = qs.prefetch_related('pubmapublikationperson_set__person')
qs = qs.prefetch_related('pubmapublikationsprache_set')
if self.q:
if self.q.isdigit():
qs = qs.filter(Q(projektnummer__contains=self.q))
else:
qs = qs.filter(
(Q(pubmapublikationperson__rolle=1) & Q(pubmapublikationperson__person__vorname__icontains=self.q))
| (Q(pubmapublikationperson__rolle=1) & Q(pubmapublikationperson__person__nachname__icontains=self.q))
| (Q(pubmapublikationsprache__order=1) & Q(pubmapublikationsprache__titel__icontains=self.q)) #as soon as I add this third line I get results multiple times
)
#qs = qs.distinct()
#does not work
# django.db.utils.DatabaseError: ORA-00932: inconsistent datatypes: expected - got CLOB
return qs
我尝试了distinct()对查询集,但我确实得到以下DB错误:
django.db.utils.DatabaseError: ORA-00932: inconsistent datatypes: expected - got CLOB
似乎来自其中一个字段。如何确保distinct仅用于oracle DB中的pk ?
这是因为同一行再次连接,使用Django distinct()