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)

Reply via email to