【问题标题】:django oscar abstract models customizationdjango oscar 抽象模型定制
【发布时间】:2013-12-26 10:05:40
【问题描述】:

我想覆盖 django-oscar 地址应用程序。我需要的是删除一些 AbstractAddress 属性(apps.address.abstact_models)。 根据这个docs,流程如下 - 创建具有相同名称的本地应用程序并在模型模块中发挥我的作用。不要忘记在文件末尾从默认的 abstract_models 导入 *。然后将此应用添加到 installed_apps 中,最后添加 schemamigration --auto 并迁移。

但 django 没有接受更改。而且, 任何覆盖 AbstractAddress 类方法的尝试都将被忽略。为什么? abstract_models 有什么特别之处吗?

【问题讨论】:

    标签: django django-oscar


    【解决方案1】:

    原因通常是您的定制模型是在 Oscar 原始模型之后挑选(导入)的。确保该应用程序位于 Oscar 的应用程序之上。

    如果没有,Django Oscar 文档中有一个很好的提示:http://django-oscar.readthedocs.org/en/latest/topics/customisation.html

    模型定制没有被采纳

    您尝试自定义 Oscar 的模型之一是一个常见问题,但您的新字段似乎没有得到采纳。这通常是由于 Oscar 的模型在您的定制模型之前被导入。 Django 的模型注册忽略所有进一步的模型声明。

    在您的覆盖模型.py 中,确保在定义自定义模型后导入 Oscar 模型。如果这没有帮助,你有一个从 oscar.apps.*.models 的导入,它在你的模型被解析之前正在执行。找到该导入的一个技巧:将 assert False 放入相关 Oscar 的 models.py 中,堆栈跟踪将显示导入模块。

    如果其他模块需要导入您的模型,则从您的本地模块导入,而不是直接从 Oscar 导入。

    【讨论】:

      【解决方案2】:

      抽象模型类并不像其他模型那样被动态覆盖和拾取。 但是,您可以创建自己的抽象类并创建一个继承自它的新地址模型(例如 ShippingAddress),而不是 oscar 中包含的那个。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多