我在django中使用带有elasticsearch后端的haystack,并使用drf-haystack来实现结果的序列化器。
我首先创建了一个StudentIndex,它通过StudentProfiles编制索引,用于搜索 search_indexes.py
中的学生class StudentIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(
document=True,
use_template=True,
template_name="search/indexes/user_search_text.txt")
//other indexes or indices or whatever
def get_model(self):
return StudentProfile
def index_queryset(self, using=None):
return StudentProfile.objects.filter(user__is_active=True)
传递给 views.py :
中的序列化程序和视图集class StudentSerializer(HaystackSerializer):
class Meta:
index_classes = [StudentIndex]
class StudentSearchView(ListModelMixin, HaystackGenericAPIView):
index_models = [StudentProfile]
serializer_class = StudentSerializer
pagination_class = None
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
并且一切都很好和花花公子....直到我在其他配置文件和单个视图/序列化器上添加了两个索引来处理它们。全部存在于相同的文件中: 的 search_indexes.py
class TeacherIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(
document=True,
use_template=True,
template_name="search/indexes/user_search_text.txt")
//other indexes or indices or whatever
def get_model(self):
return TeacherProfile
def index_queryset(self, using=None):
return TeacherProfile.objects.filter(user__is_active=True)
class StaffIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(
document=True,
use_template=True,
template_name="search/indexes/user_search_text.txt")
//other indexes or indices or whatever
def get_model(self):
return StaffProfile
def index_queryset(self, using=None):
return StaffProfile.objects.filter(user__is_active=True)
并添加到 views.py :
class StaffSerializer(HaystackSerializer):
class Meta:
index_classes = [StaffIndex, TeacherIndex]
class StaffSearchView(ListModelMixin, HaystackGenericAPIView):
index_models = [StaffProfile, TeacherProfile]
serializer_class = StaffSerializer
pagination_class = None
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
现在....每个视图都进入自己的url端点(分别是/ student-search和/ staff-search),但只有人员搜索端点正确返回Staff和TeacherProfile结果,而学生搜索,一个单独的端点,单独的视图和模型和索引都明确说明,是返回StudentProfiles和教师和StaffProfiles,我不能为我的生活找出原因。
如果有人之前碰到过这种情况,我真的很感谢帮助解决,更重要的是,理解这个问题。
提前致谢!
答案 0 :(得分:0)
那么,对于具有相同问题的未来人来说,我只需要做的就是解决它。
我正在使用DRF-Haystack genericviewapi,在视图中,我只是将filter_queryset定义为使用正确的haystack连接(忽略其他索引)。例如:
class StudentSearchView(ListModelMixin, HaystackGenericAPIView):
index_models = [StudentProfile]
serializer_class = StudentSerializer
pagination_class = None
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def filter_queryset(self, queryset):
queryset = super(HaystackGenericAPIView, self).filter_queryset(queryset)
return queryset.using('student')
现在一切正常:)
答案 1 :(得分:0)
我遇到了同样的问题,但是当我使用// call to catName before declaration
catName("Chloe");
function catName(name) {
console.log(`My cat's name is ${name}!`);
}
时,它会引发queryset.using('dynamic')
:键“ dynamic”不是可用的连接。
django.core.exceptions.ImproperlyConfigured