我目前正在开发Wagail的一个分支(版本6.0a0),并试图建立一个开发环境来为该项目做出贡献.我遵循了设置项目的标准步骤,但在为基于Wagail的网站运行迁移时遇到了ImportError.

Steps I've Taken:

  • 在本地克隆了派生的存储库.
  • 为我的工作激活了Python虚拟环境.
  • 使用"pip install-e.[Testing,docs]-U"安装了克隆的项目.
  • 已为JavaScript依赖项执行"npm ci"和"npm run Build".
  • 在一个单独的目录中创建了一个新的Wagail网站.
  • 运行"python manage.py migrate",遇到ImportError.

Error Message:
Traceback (most recent call last):
    File "path/to/manage.py", line 10, in
        ...
        from wagtail.search.models import Query
ImportError: cannot import name 'Query' from 'wagtail.search.models'

Additional Information:

  • 已发布的Wagail版本(5.2a0版)可以使用"pip install wagail"成功安装,没有任何问题.
  • 我的需求文件指定Django Version 4.2,但Django Version 4.0.10安装在我的Python虚拟环境中.(此版本与克隆的wagail项目一起安装)
  • 由Wagail生成的网站中的Requirements s.txt文件指定了以下内容:Django&>=4.2,<4.3//wagail==5.2a0

我起初认为这可能是一个依赖项版本的问题,因为发布的版本与Django 4.2版本工作得很好,所以我将Django更新到4.2,但问题仍然存在.

My questions:

  • 在使用我的WagailForking (版本6.0a0)时,什么可能会导致这个ImportError,而在使用发布的版本(5.2a0)时不会发生这种情况?
  • 如何设置开发环境来为wagtail做贡献(我试着按照所示的文档操作,但我无法正确设置)

推荐答案

正如Rich的回答中所指出的,查询模型(引用于 由wagtail start创建的初始项目 struct 从wagtail.search模块移至Wagail 5.0中的wagtail.contrib.search_promotions模块.在一两周前开始研发Wagail 6.0之前,旧型号一直被搁置在原地.

将原始导入保留在默认项目 struct 中是一个错误,我现在提交了一个修复:https://github.com/wagtail/wagtail/pull/11190.一旦这一修复被合并,提出一个新的项目将按预期工作.

同时,您可以自己修补创建的项目--或者按照Rich的建议将导入更改为search/views.py,或者将其与search函数中的以下两行一起删除:

    query = Query.get(search_query)
    query.add_hit()

或者,我建议使用bakerydemo作为开发Wagtail的测试项目,而不是从头开始创建一个新项目--相关的修复程序已经应用于bakerydemo.

Django相关问答推荐

Django为什么我的post.count_view递增2?

如何显示;Django认证系统;在模板中?

Django allauth 社交帐户注册中邮箱的模板变量

测试 - 两个类共享相同的登录代码,但它只能在一个类中工作

一次请求中更新整个Django模型

在 Serverless + Lambda + API Gateway HTTP API 上运行的 Django 应用程序正在重写链接以使用默认前缀

Django 和 HTML 无法从指定时间开始视频

查询 django 模型以找到当月最好的公司销售

- 不支持的操作数类型:DateField和DateField

data._mutable= 在 Django REST 框架中为真

如何让 Django 在模板更改时重新启动运行服务器?

使用 args 和选项编写自定义管理命令 - 所需字段说明

如何让两个模型相互引用 Django

Django:get_or_create 使用 together_unique 引发重复条目

一个简单的Django和CSS示例

Django删除查询集的最后五个以外的所有内容

用户组和权限

超过 1 个外键

在 Django 中注册用户的最佳方法

Django 模型方法 - create_or_update