Definoval som deklarovanú vlastnú stratégiu výberu akcie a ceny podľa popisu v http://django-oscar.readthedocs.io/en/releases-1.1/topics/prices_and_availability.html
Všetko fungovalo dobre, až kým som nemal potrebu importovať vlastnú triedu modelov, ktorú som vytvoril v aplikácii katalóg. Mojím cieľom bolo získať prístup k tomuto vlastnému modelu pre stratégiu výberu cien.
v /apps/partner/strategy
Pokúsil som sa importovať model takto:
CountrySpecificProductInformation = get_model("catalogue", "CountrySpecificProductInformation")
toto volanie vyvoláva výnimku Model Not Registered:
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.
moje nastavenia nainštalovaných aplikácií vyzerajú takto:
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"])
používam django-oscar 1.3 s Django 1.9.9
odpovede:
0 pre odpoveď č. 1Oscar má svoj vlastný importný systém, ktorý je nevyhnutný na to, aby bolo možné prepísať ktorúkoľvek časť ľubovoľnej aplikácie riešenia elektronického obchodu.
Trieda stratégie sa importuje skoro pri spustení servera a niektoré modely ešte v tom čase nie sú zaregistrované.
Riešením bol import modulu, ktorý nebol na serverihorná časť modulu v sekcii import, ale iba v prípade, že sú potrebné modely. (V mojom prípade to bola metóda select_stockrecord:
z oscar.core.loading import get_class, get_model
CountrySpecificProductInformation = get_model ("katalóg", „CountrySpecificProductInformation“)
def select_stockrecord(self, product):
CountrySpecificProductInformation = get_model("catalogue", "CountrySpecificProductInformation")
Country = get_model("catalogue", "Country")
Nie je to dokonalé riešenie, ale uprednostňujem to skôr ako písanie nespracovaných dotazov sql priamo do databázy.