У меня есть приложение для блога, использующее django со следующими моделями
class Category(models.Model):
id=models.AutoField(primary_key=True)
title=models.CharField(unique=True,max_length=30,null=False,blank=False)
class Article(models.Model):
id=models.AutoField(primary_key=True)
title=models.CharField(max_length=100,null=False,blank=False)
category=models.ForeignKey(Category,null=False,blank=False)
summary=models.CharField(null=False,blank=False,max_length=400)
content = models.TextField(null=False, blank=False)
class Comment(models.Model):
id=models.AutoField(primary_key=True)
article=models.ForeignKey(Article,null=False,blank=False)
visitor_name=models.CharField(max_length=50,null=False,blank=False)
content=models.TextField(null=False,blank=False)
В области администратора я пытаюсь реализовать поисковую систему, которая позволит администратору искать комментарии по нескольким полям.
Я использую следующий код:
all_queries = None
keywords=''
search_fields = ('visitor_name','content','article__title','article__resume','article__category__title','article__content')
for keyword in keywords.split(' '):
keyword_query = None
for field in search_fields:
each_query = Q(**{field + '__icontains': keyword})
if not keyword_query:
keyword_query = each_query
else:
keyword_query = keyword_query | each_query
if not all_queries:
all_queries = keyword_query
else:
all_queries = all_queries & keyword_query
comments = Comment.objects.filter(all_queries).distinct().order_by('-date')
У меня проблема с этой строкой:
search_fields = ('visitor_name','content','article__title','article__resume','article__category__title','article__content')
Каким-то образом я получаю пустой набор запросов, потому что я 'm поиск в 6 полях, так как я могу искать только в 2.
Например, эта строка:
search_fields = ('visitor_name','content')
работает очень хорошо, потому что в ней есть ровно два поля для поиска.
Если я добавлю только одно поле в массив, оно не будет работать