Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django makemigrations not detecting project/apps/myapp

Solved

Interesting:

  • ./manage.py makemigrations apps.myapp -> "App 'apps.myapp' could not be found. Is it in INSTALLED_APPS?"
  • ./manage.py makemigrations myapp -> Works.
  • ./manage.py makemigrations -> "No changes detected" (it does detect changes if myapp is in the project root)



Original question:

Project structure

myproject/
    myproject/
    apps/
        myapp/
            __init__.py
            admin.py
            models.py
            urls.py
            views.py
            tests.py
        myapp2/
        myapp3/
        __init__.py
    static/
    templates/
    virtualenv/
    manage.py

myproject/apps/myapp/models.py

from django.db import models

class MyModel(models.Model):
    name = models.CharField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)

Settings.py

INSTALLED_APPS = [
    # ...
    'apps.myapp',
    'apps.myapp2',
    'apps.myapp3',
]

makemigrations cannot find "myapps" that's not in the project root.
At the same time, migrate does find it.

$ ./manage.py makemigrations apps.myapp
App 'apps.myapp' could not be found. Is it in INSTALLED_APPS?

$ ./manage.py migrate apps.myapp
CommandError: App 'apps.myapp' does not have migrations.

Isn't the "let's put our apps into an apps folder" practise valid any more, am I doing something wrong, or is it a bug of the makemigrations command?

Note1: before running makemigrations, I removed the "migrations" folder of myapp, but I'm pretty sure it doesn't matter. It did get re-created when the app was in the project root.

Note2: I did research google and stackoverflow, I only found similar questions where the solution was either "adding the app to settings.py", "running makemigrations before migrate" or "some migration issue between Django 1.6 and 1.7". None of these apply to my situation, I think.

like image 854
danbal Avatar asked Sep 24 '16 17:09

danbal


3 Answers

You may have deleted the migrations folder inside the app or __init__.py inside the <app>/migrations/ folder, create a new one

myproject/
apps/
    myapp/
        migrations/
            __init__.py

You can always do makemigrations seperately without doing the above step

python manage.py makemigrations myapp
like image 147
Shinto Joseph Avatar answered Nov 19 '22 20:11

Shinto Joseph


try

INSTALLED_APPS = [
    # ...
    'myproject.apps.myapp',
]

and

python manage.py makemigrations myapp 
like image 23
doniyor Avatar answered Nov 19 '22 20:11

doniyor


It's works now. It didn't work before because I didn't make any changes to my model. I'm new to django and was trying to execute the command from the videos I watched. Django documentation tells you that makemigrations create new migrations based on the changes you made to your model. So, I make changes in models.py and admin.py and it's working now.

like image 1
Marnilce Silva Avatar answered Nov 19 '22 20:11

Marnilce Silva