Django: App in subdirectory relative import











up vote
0
down vote

favorite












I'm settings up a Django project following the structure of this cookiecutter template but I'm having problems with explicit relative imports in my apps.



I'm trying to import my models using from .model import ModelA but I'm getting this error from Django:




RuntimeError: Model class core.models.ModelA doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.




My project is structured like this:



my_project
- config
- __init__.py
- settings.py
- urls.py
- my_project
- __init__.py
- core # this is an app
- __init__.py
- models.py
# remaining app files
manage.py


I have of course put my app in INSTALLED_APPS:



INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'my_projects.core.apps.CoreConfig', # my app
]


And CoreConfig is setup as:



class CoreConfig(AppConfig):
name = 'my_project.core'


It feels like django is not loading the AppConfig when using explicit relative import.



Everything works perfectly if I change my imports to absolute paths from my_project.core.models import ModelA



What am I missing?



EDIT 1:



Might also be worth mentioning that I've added a few rows to my manage.py (as in the cookiecutter template) for adding the my_project directory to the sys.path.



from django.conf import settings
sys.path.append(os.path.join(settings.ROOT_DIR, 'my_project'))









share|improve this question
























  • hi, I just had a same problem. Do you have solved this?
    – baskershu
    17 hours ago















up vote
0
down vote

favorite












I'm settings up a Django project following the structure of this cookiecutter template but I'm having problems with explicit relative imports in my apps.



I'm trying to import my models using from .model import ModelA but I'm getting this error from Django:




RuntimeError: Model class core.models.ModelA doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.




My project is structured like this:



my_project
- config
- __init__.py
- settings.py
- urls.py
- my_project
- __init__.py
- core # this is an app
- __init__.py
- models.py
# remaining app files
manage.py


I have of course put my app in INSTALLED_APPS:



INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'my_projects.core.apps.CoreConfig', # my app
]


And CoreConfig is setup as:



class CoreConfig(AppConfig):
name = 'my_project.core'


It feels like django is not loading the AppConfig when using explicit relative import.



Everything works perfectly if I change my imports to absolute paths from my_project.core.models import ModelA



What am I missing?



EDIT 1:



Might also be worth mentioning that I've added a few rows to my manage.py (as in the cookiecutter template) for adding the my_project directory to the sys.path.



from django.conf import settings
sys.path.append(os.path.join(settings.ROOT_DIR, 'my_project'))









share|improve this question
























  • hi, I just had a same problem. Do you have solved this?
    – baskershu
    17 hours ago













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I'm settings up a Django project following the structure of this cookiecutter template but I'm having problems with explicit relative imports in my apps.



I'm trying to import my models using from .model import ModelA but I'm getting this error from Django:




RuntimeError: Model class core.models.ModelA doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.




My project is structured like this:



my_project
- config
- __init__.py
- settings.py
- urls.py
- my_project
- __init__.py
- core # this is an app
- __init__.py
- models.py
# remaining app files
manage.py


I have of course put my app in INSTALLED_APPS:



INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'my_projects.core.apps.CoreConfig', # my app
]


And CoreConfig is setup as:



class CoreConfig(AppConfig):
name = 'my_project.core'


It feels like django is not loading the AppConfig when using explicit relative import.



Everything works perfectly if I change my imports to absolute paths from my_project.core.models import ModelA



What am I missing?



EDIT 1:



Might also be worth mentioning that I've added a few rows to my manage.py (as in the cookiecutter template) for adding the my_project directory to the sys.path.



from django.conf import settings
sys.path.append(os.path.join(settings.ROOT_DIR, 'my_project'))









share|improve this question















I'm settings up a Django project following the structure of this cookiecutter template but I'm having problems with explicit relative imports in my apps.



I'm trying to import my models using from .model import ModelA but I'm getting this error from Django:




RuntimeError: Model class core.models.ModelA doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.




My project is structured like this:



my_project
- config
- __init__.py
- settings.py
- urls.py
- my_project
- __init__.py
- core # this is an app
- __init__.py
- models.py
# remaining app files
manage.py


I have of course put my app in INSTALLED_APPS:



INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'my_projects.core.apps.CoreConfig', # my app
]


And CoreConfig is setup as:



class CoreConfig(AppConfig):
name = 'my_project.core'


It feels like django is not loading the AppConfig when using explicit relative import.



Everything works perfectly if I change my imports to absolute paths from my_project.core.models import ModelA



What am I missing?



EDIT 1:



Might also be worth mentioning that I've added a few rows to my manage.py (as in the cookiecutter template) for adding the my_project directory to the sys.path.



from django.conf import settings
sys.path.append(os.path.join(settings.ROOT_DIR, 'my_project'))






python django






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 11 at 12:20

























asked Nov 11 at 12:13









Mattias

1221312




1221312












  • hi, I just had a same problem. Do you have solved this?
    – baskershu
    17 hours ago


















  • hi, I just had a same problem. Do you have solved this?
    – baskershu
    17 hours ago
















hi, I just had a same problem. Do you have solved this?
– baskershu
17 hours ago




hi, I just had a same problem. Do you have solved this?
– baskershu
17 hours ago












1 Answer
1






active

oldest

votes

















up vote
0
down vote













When append urls in config.urls, you should use my_projects.core.urls instead of core.urls. for example:



urlpatterns = [
...

# Your stuff: custom urls includes go here
path("my_projects/", include("my_projects.core.urls", namespace="my_projects")),
] + static(
settings.MEDIA_URL, document_root=settings.MEDIA_ROOT
)





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53248640%2fdjango-app-in-subdirectory-relative-import%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote













    When append urls in config.urls, you should use my_projects.core.urls instead of core.urls. for example:



    urlpatterns = [
    ...

    # Your stuff: custom urls includes go here
    path("my_projects/", include("my_projects.core.urls", namespace="my_projects")),
    ] + static(
    settings.MEDIA_URL, document_root=settings.MEDIA_ROOT
    )





    share|improve this answer

























      up vote
      0
      down vote













      When append urls in config.urls, you should use my_projects.core.urls instead of core.urls. for example:



      urlpatterns = [
      ...

      # Your stuff: custom urls includes go here
      path("my_projects/", include("my_projects.core.urls", namespace="my_projects")),
      ] + static(
      settings.MEDIA_URL, document_root=settings.MEDIA_ROOT
      )





      share|improve this answer























        up vote
        0
        down vote










        up vote
        0
        down vote









        When append urls in config.urls, you should use my_projects.core.urls instead of core.urls. for example:



        urlpatterns = [
        ...

        # Your stuff: custom urls includes go here
        path("my_projects/", include("my_projects.core.urls", namespace="my_projects")),
        ] + static(
        settings.MEDIA_URL, document_root=settings.MEDIA_ROOT
        )





        share|improve this answer












        When append urls in config.urls, you should use my_projects.core.urls instead of core.urls. for example:



        urlpatterns = [
        ...

        # Your stuff: custom urls includes go here
        path("my_projects/", include("my_projects.core.urls", namespace="my_projects")),
        ] + static(
        settings.MEDIA_URL, document_root=settings.MEDIA_ROOT
        )






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 16 hours ago









        baskershu

        765




        765






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53248640%2fdjango-app-in-subdirectory-relative-import%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Full-time equivalent

            Bicuculline

            さくらももこ