【问题标题】:TypeError: index_queryset() got an unexpected keyword argument 'using'TypeError: index_queryset() 得到了一个意外的关键字参数“使用”
【发布时间】:2021-09-19 17:53:08
【问题描述】:
Django==3.2.5
django-haystack==3.0
pysolr==3.9.0

Solr = 8.9.0

我正在按照教程进行操作 https://django-haystack.readthedocs.io/en/master/tutorial.html 用 Solr 创建一个 Django 应用程序。

在执行./manage.py rebuild_index 时,我收到如下错误:

 **File "/..../tele_env/lib/python3.8/site-packages/haystack/indexes.py", 
line  202, in build_queryset
index_qs = self.index_queryset(using=using)
TypeError: index_queryset() got an unexpected keyword argument 'using'** 

自从解决此错误 3 天以来,我一直在坚持。试图降级每个 软件包(Django、pysolr、带有 solr 6.6 的 haystack,但对我没有帮助。

请帮助我走出这个升级和降级的循环...... 提前致谢

【问题讨论】:

  • self.index_queryset 是如何实现的?是否需要using 参数?
  • 是的...它以 using 作为参数。我已经检查了
  • 显示你从SearchIndex或类似类继承的代码。
  • 非常感谢您抽出宝贵时间...我的问题得到了解决。我的函数定义 (index_queryset) 有问题。我错过了使用参数。

标签: python django solr django-haystack pysolr


【解决方案1】:

所以我刚刚阅读了来自django-haystack 3.0 的源代码,并且有一些奇怪的东西。

第一件事是using 参数从未在函数定义中使用(可能它用于子类,我没有深入挖掘):

def index_queryset(self, using=None):
        """
        Get the default QuerySet to index when doing a full update.
        Subclasses can override this method to avoid indexing certain objects.
        """
        return self.get_model()._default_manager.all()

回到你的错误,在 build_queryset 方法中,参数 using 被传递给函数 index_queryset 而不是查询集本身,所以我不明白为什么它会引发错误。

最后一件事是,我用 Django 2 和 3 项目进行了测试,并且 using 始终是查询集的一种方法,而不是参数,所以我很困惑。你的回溯来自Django 3.2haystack 3.0 吗?

【讨论】:

  • 是的....这个回溯来自 Django 3.2 和 haystack 3。即使我也看不到“使用”的用法。但是作为 solr 的新手,我害怕从 package 已经给出的函数中删除参数。
  • 可能值得在 Github 中打开一个问题或查看现有问题。
  • 我的问题得到了解决..我为 Index 创建的类中存在问题。非常感谢您的时间。以前我错过了写第二个参数(使用)。 def index_queryset(self,using=None): return self.get_model().objects.all()
猜你喜欢
  • 2016-09-17
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2020-11-16
相关资源
最近更新 更多