python - How to alter Fields in Django and Oscar -
i making web application django-oscar, , make user field required in partner model.
my first approach override "user" field in partner model, read cannot override fields in django.
so, how 1 alter field in oscar if can't override it?
thanks!
the docs aren't clear, fortunately kind of model overriding well-supported in oscar way it's been engineered.
but instead of sub-classing oscar.apps.partner.partner
model , overriding field need make own myproject.partner
app.
the key thing note models in oscar implemented abstract models. oscar checks see if you've overridden of framework apps, if not oscar define concrete model abstract ones. if have overridden framework app though first try load concrete model, fallback it's own models haven't touched.
see docs here:
https://django-oscar.readthedocs.org/en/releases-1.0/topics/customisation.html#fork-the-oscar-app
first run this:
$ ./manage.py oscar_fork_app partner myproject/
which create skeleton of overridden app myproject.partner
then edit settings:
# settings.py oscar import get_core_apps # ... installed_apps = [ # non-oscar apps ] + get_core_apps(['myproject.partner'])
and in myproject/partner/models.py
:
from django.db import models oscar.apps.partner.abstract_models import abstractpartner class partner(abstractpartner): user = models.foreignkey(...customised here...) oscar.apps.partner.models import *
since imported them @ bottom them partner.stockrecord
, partner.stockalert
models come oscar normal, use customised partner
model automatically everywhere.
if want use abstracted class loading apparatus oscar uses can (and confirm override working):
in [1]: oscar.core.loading import get_class in [2]: partner = get_class('partner.models', 'partner') in [3]: print partner <class 'myproject.partner.models.partner'> in [4]: stockalert = get_class('partner.models', 'stockalert') in [5]: print stockalert <class 'oscar.apps.partner.models.stockalert'>
Comments
Post a Comment