Hi, Currently I develop a large website using Django, and I have in the project some applications with a very big models file, and I want to separate it in 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 Post from Category import Author .... 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. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-developers?hl=en -~----------~----~----~----~------~----~------~--~---
Index: db/models/base.py =================================================================== --- db/models/base.py (revision 5369) +++ db/models/base.py (working copy) @@ -47,7 +47,8 @@ # Figure out the app_label by looking one level up. # For 'django.contrib.sites.models', this would be 'sites'. model_module = sys.modules[new_class.__module__] - new_class._meta.app_label = model_module.__name__.split('.')[-2] + module_name = model_module.__name__.split('.') + new_class._meta.app_label = module_name[module_name.index('models')-1] # Bail out early if we have already created this class. m = get_model(new_class._meta.app_label, name, False)