/ / ako správne importovať modely do strategického modulu aplikácie oscar.partner? - django, django-models, django-oscar

ako importovať modely do strategického modulu aplikácie oscar.partner správne? - django, django-modely, django-oscar

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ď č. 1

Oscar 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.