/ / как правилно да импортирате модели в стратегическия модул за приложение oscar.partner? - django, django-модели, django-oscar

как да импортирате правилно моделите на стратегията на oscar.partner app? - Джанго, Джанго-модели, Джанго-Оскар

Дефинирах декларирана моя собствена стратегия за избор на акция и цена, както е описано в 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 за отговор № 1

Oscar има собствена система за импортиране, която е необходима, за да може да презапише всяка част от всяко приложение на решението за електронна търговия.

Класът на стратегия се импортира в началото, когато сървърът стартира, а някои модели все още не са регистрирани.

Решението беше да импортирате модула не вотгоре на модула в секцията за импортиране, но инсталиран само в метода, където моделите са необходими. (В моя случай това беше методът 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 заявки директно в базата данни.