I've been following the DjangoProject tutorial. When I run
python manage.py startapp newapp
while in the same directory as manage.py. In the newapp directory I see init.py, models.py, tests.py, and views.py but not admin.py file. Where is admin.py?
You have to create it yourself.
edit:
Currently only the development version of Django creates an admin.py file within a new app.
Related
I have the structure of my project:
project
———— project
———— app
———————— subapp
———— manage.py
I added my sub-app to INSTALLED_APPS like that:
INSTALLED_APPS = ['app.apps.AppConfig', 'app.subapp.apps.SubapConfig']
But it doesn't works. Django gives me an error message:
No module named 'news' and Cannot import 'news'. Check that
'apps.subapp.apps.SubapConfig.name' is correct.
Let's assume I've created an app named polls with the following command:
python manage.py startapp polls
Now I want to create a sub-app named subpoll inside the main app means inside the polls folder. So, how do I do that?
At first, I'll create a directory My_App_Name inside the /polls folder. In my case, I'll create a subpoll folder inside the polls folder.
After that, run the following command to create the new app.
python manage.py startapp My_App_Name ./polls/Your_Apps_Folder_Name/
So, in my case the following command will be like:
python manage.py startapp subpoll ./polls/subpoll/
Finally, I'll add just created apps name in the settings.py like below:
INSTALLED_APPS = [
...,
'polls',
'polls.subpoll',
]
I had a similar issue. In the apps.py Config class you need to set name to be the full dotted path. So based on the structure you give:
project
———— project
———— app
———————— subapp
———— manage.py
You would have:
class AppConfig(AppConfig):
name = "app"
and
class SubappConfig(AppConfig):
name = "app.subapp"
This should then work for you.
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.
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
try
INSTALLED_APPS = [
# ...
'myproject.apps.myapp',
]
and
python manage.py makemigrations myapp
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.
I had the same problem. I solved it by adding "migrations" file into the app folders.
I've been following the DjangoProject tutorial. When I run python manage.py startapp newapp while in the same directory as manage.py. In the newapp directory I see init.py, models.py, tests.py, and views.py but not admin.py file. Where is admin.py?
I am running Django 1.5.1 in Windows 8
You have to create an admin.py file.
you don't necessarily need an admin.py file,
just import the admin module in your models.py file,
from django.contrib import admin
and for each model do the following:
admin.site.register(model1)
admin.site.register(model2)
However, this is not best practice, but since it's just a tutorial, it will work.
You also need to uncoment the relevant lines in the urls.py file
I think I had the same frustrations following the DjangoProject tutorial - however, when I cross-referenced it with with the DjangoBook tutorial (for the same version, I believe, 1.5.1), I found that an admin.py file was not necessarily created after a python manage.py startapp xyz command -- moreover, I also uncommented all of the admin options in urls.py, views.py, and settings.py - so a bit of a mix of what Neal and Ibrahim said
You have to create your own admin.py file in the app if you want it. Indeed, this file is optionnal and isn't created by startapp.
If you want a default template to begin your admin.py, it should be:
from django.contrib import admin
from models import Model1, Model2
class Model2Admin(admin.ModelAdmin):
list_display = ('title', 'content', 'date')
# Just an example, chekc docs and tutorials for more info.
admin.site.register(Model1)
admin.site.register(Model2, Model2Admin)
The reason there is no default admin.py is because you don't have any models yet when you create your new application; so there is nothing to add to the admin section.
Further, you may not want to admin all the models in your application; or you may be creating an application that does not need any admin hookups; or you may not be using the admin application at all in your project.
Since django cannot decide this for you, there is no default admin.py generated.
To create one, if you are following the tutorial - simply keep reading and in part two you'll create the admin.py file when you learn about the admin contrib app and how to integrate it with your custom models.
I have an app. I think I know the name, instamagic, but I get django.core.exceptions.ImproperlyConfigured: App with label instamagic could not be found
when I try to do a migration of the database
How do I find my app's name?
My folder structure
instamagic
__init__.py (empty file)
manage.py
settings.py
urls.py
api/
image/
templates/
userprofile/
Have you added 'instamagic' to your INSTALLED_APPS in settings.py?
[EDIT]
When calling south migrations, use: `manage.py schemamigration [migration_name] --auto
I need to add admin.py in my app folder.
Currently the app folder contains the following files:
__init__.py
models.py
test.py
views.py
Any help will do :-)
The tutorial say to edit admin.py in the polls directory. However, if you're just starting a new project admin.py will not exist.
You can simply create a blank admin.py file and add the contents suggested by the tutorial. Django will automatically notice any admin settings from this file when the admin app is enabled.