Дефинирах декларирана моя собствена стратегия за избор на акция и цена, както е описано в 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 с Джанго 1.9.9
Отговори:
0 за отговор № 1Oscar има собствена система за импортиране, която е необходима, за да може да презапише всяка част от всяко приложение на решението за електронна търговия.
Класът на стратегия се импортира в началото, когато сървърът стартира, а някои модели все още не са регистрирани.
Решението беше да импортирате модула не вотгоре на модула в секцията за импортиране, но инсталиран само в метода, където моделите са необходими. (В моя случай това беше методът select_stockrecord:
от oscar.core.loading import get_class, get_model
CountrySpecificProductInformation = get_model ("каталог", "CountrySpecificProductInformation")
def select_stockrecord(self, product):
CountrySpecificProductInformation = get_model("catalogue", "CountrySpecificProductInformation")
Country = get_model("catalogue", "Country")
Не е идеално решение, но предпочитам това, а не да пиша сурови sql заявки директно в базата данни.