Separate models.py in multiple files
|Reported by:||Sidi Mohamed EL AATIFI <elaatifi@…>||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.
Change History (23)
Changed 7 years ago by Sidi Mohamed EL AATIFI <elaatifi@…>
comment:1 Changed 7 years ago by SmileyChris
- Needs documentation unset
- Needs tests set
- Patch needs improvement unset
- Triage Stage changed from Unreviewed to Design decision needed
comment:10 follow-up: ↓ 12 Changed 6 years ago by ubernostrum
- Resolution set to duplicate
- Status changed from new to closed