Separate models.py in multiple files
|Reported by:||Owned by:||nobody|
|Component:||Database layer (models, ORM)||Version:||master|
|Cc:||brosner@…, drackett@…, gabor@…, camillobruni@…||Triage Stage:||Design decision needed|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||yes||Patch needs improvement:||no|
I want to separate my models file (models.py) into multiple files : Product.py, Category.py, .... , which will be set up in the models directory. That´s to say:
+ myapp/ + models/ |- __init__.py |- Product.py |- Category.py |- Media.py |- ...
Since models is a module, we have to add the file init.py:
from Product import Product from Category import Category ....
When doing, there are some actions from manage.py related to models that will not work.
It can be fixed, by associating models explicitly to the application :
class Product(models.Model): ... class Meta: app_label = 'myapp'
The app_label is deducted from the name of model module (django/db/models/base.py, ):
new_class._meta.app_label = model_module.__name__.split('.')[-2]
So when the model module name is myproject.myapp.models.product, the app_label deducted is models and not myapp, and this is
why manage.py syndb doesnt work for example.
I suggest to change it:
module_name = model_module.__name__.split('.') new_class._meta.app_label = module_name[module_name.index('models')-1]
it works perfectly in the both cases.