如何正确导入模型到 oscar.partner 应用的策略模块?
how to import models to oscar.partner app's strategy module correctly?
我已将自己的策略定义为 Select 股票和价格,如 http://django-oscar.readthedocs.io/en/releases-1.1/topics/prices_and_availability.html
中所述
一切正常,直到我需要导入我在目录应用程序中创建的自定义模型 class。
我的目标是为价格选择策略访问此自定义模型。
在 /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
Oscar 有自己的导入系统,能够覆盖电子商务解决方案的任何应用程序的任何部分。
策略class在服务器启动的时候很早就导入了,当时有些模型还没有注册。
解决方案是不在导入部分的模块顶部导入模块,而是仅在需要模型的方法中导入。 (在我的例子中是 select_stockrecord 方法:
from oscar.core.loading import get_class, get_model
CountrySpecificProductInformation = get_model('catalogue',
'CountrySpecificProductInformation')
def select_stockrecord(self, product):
CountrySpecificProductInformation = get_model('catalogue', 'CountrySpecificProductInformation')
Country = get_model('catalogue', 'Country')
这不是一个完美的解决方案,但我更喜欢这个,而不是将原始 sql 查询直接写入数据库。
我已将自己的策略定义为 Select 股票和价格,如 http://django-oscar.readthedocs.io/en/releases-1.1/topics/prices_and_availability.html
中所述一切正常,直到我需要导入我在目录应用程序中创建的自定义模型 class。 我的目标是为价格选择策略访问此自定义模型。
在 /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
Oscar 有自己的导入系统,能够覆盖电子商务解决方案的任何应用程序的任何部分。
策略class在服务器启动的时候很早就导入了,当时有些模型还没有注册。
解决方案是不在导入部分的模块顶部导入模块,而是仅在需要模型的方法中导入。 (在我的例子中是 select_stockrecord 方法:
from oscar.core.loading import get_class, get_model
CountrySpecificProductInformation = get_model('catalogue', 'CountrySpecificProductInformation')
def select_stockrecord(self, product):
CountrySpecificProductInformation = get_model('catalogue', 'CountrySpecificProductInformation')
Country = get_model('catalogue', 'Country')
这不是一个完美的解决方案,但我更喜欢这个,而不是将原始 sql 查询直接写入数据库。