我已经定义了我自己选择股票的策略和价格,如http://django-oscar.readthedocs.io/en/releases-1.1/topics/prices_and_availability.html
中所述一切正常,直到我需要导入我在目录应用程序中创建的自定义模型类。 我的目标是为价格选择策略访问此自定义模型。
在/apps/partner/strategy
中的我尝试导入这样的模型:
CountrySpecificProductInformation = get_model('catalogue', 'CountrySpecificProductInformation')
此调用会引发模型未注册的异常:
File "/home/matyas/virtenvs/oscar/local/lib/python2.7/site-packages/oscar/core/loading.py", line 250, in get_model
return apps.get_registered_model(app_label, model_name)
File "/home/matyas/virtenvs/oscar/local/lib/python2.7/site-packages/django/apps/registry.py", line 260, in get_registered_model
"Model '%s.%s' not registered." % (app_label, model_name))
LookupError: Model 'catalogue.CountrySpecificProductInformation' not registered.
我的已安装应用设置如下所示:
INSTALLED_APPS = ['...'] +
oscar.get_core_apps(['apps.catalogue', 'apps.promotions', 'apps.dashboard',
'apps.dashboard.catalogue', 'apps.partner', 'apps.payment', 'apps.dashboard.partners',
'apps.shipping', 'apps.checkout', 'apps.search'])
我正在使用 django-oscar 1.3 与 Django 1.9.9
答案 0 :(得分:0)
奥斯卡拥有自己的导入系统,必须能够覆盖电子商务解决方案的任何应用程序的任何部分。
策略类在服务器启动时提前导入,某些模型尚未在当时注册。
解决方案是在导入部分中导入不在模块顶部的模块,但仅在需要模型的方法中进行安装。 (在我的情况下,这是select_stockrecord方法:
来自oscar.core.loading import get_class,get_model
CountrySpecificProductInformation = get_model('catalog', 'CountrySpecificProductInformation')击>
def select_stockrecord(self, product):
CountrySpecificProductInformation = get_model('catalogue', 'CountrySpecificProductInformation')
Country = get_model('catalogue', 'Country')
这不是一个完美的解决方案,但我更喜欢这个,而不是直接将原始SQL查询写入数据库。