Reputation: 1428
I'm trying to follow this To-Do Application tutorial (link) with some tiny differences on my system
I have only one app as it's named in tutorial- todo. I'm trying to display app on django's admin interface but i can't manage to do that.
When i type python manage.py syncdb command on terminal, It gives me this error message:
Below you can see my project's files.
models.py
# -*- coding: utf-8 -*-
from django.db import models
from django.contrib import admin
admin.autodiscover()
# Create your models here.
# For this application, we will need two models:
# one representing a list,
# and one representing an item in a list.
# this class will be a database table named list
class List(models.Model):
title = models.CharField(max_length=250, unique=True)
# __str__ method is like toString() in java
def __str__(self):
return self.title
class Meta:
ordering = ['title']
class Admin:
pass
# i need this for Item Class
import datetime
PRIORITY_CHOICES = (
(1, 'Low'),
(2, 'Normal'),
(3, 'High'),
)
# this class will be a database table named item
class Item(models.Model):
# this will create a charfield column named "title" in database
title = models.CharField(max_length=250)
# created_date will be a DATETIME column in the database
# datetime.datetime.now is a standard Python function
created_date = models.DateTimeField(default=datetime.datetime.now)
# default priority level will be 2 as in "Normal" in PRIORITY_CHOICES
# using choices argument as choices=PRIORITY_CHOICES , Django will allow only 1,2 and 3 as we want to
priority = models.IntegerField(choices=PRIORITY_CHOICES, default=2)
# this will create a boolean column named "completed" in database
completed = models.BooleanField(default=False)
todo_list = models.ForeignKey(List)
def __str__(self):
return self.title
class Meta:
# We have specified that list items should be ordered by two columns: priority and title.
# The - in front of priority tells Django to use descending order for the priority column,
# so Django will include ORDER BY priority DESC title ASC in its queries whenever it deals with list items.
ordering = ['-priority', 'title']
class Admin:
pass
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/Users/ihtechnology/Desktop/envi/db_gtd/sqlite3.db',
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '',
'PORT': '',
}
}
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
'django.contrib.admindocs',
# I ADDED MY APPLICATION HERE SO IN CAN BE INSTALLED INTO PROJECT AS OTHER DEFAULT DJANGO APPS
'todo',
)
urls.py
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)
admin.py
from todo.models import List
from todo.models import Item
from django.contrib import admin
admin.site.register(List)
admin.site.register(Item)
Upvotes: 1
Views: 1977
Reputation: 1
from django.utils.encoding import smart_text
def _str_(self) :
return smart_text(self.title)
for title not displaying in django admin panel
Upvotes: 0
Reputation: 10688
It's caused for circular import
issue:
+--> +/todo/models.py #line 6
| |
| +->**admin.autodiscover()**
| +
| |
| +-->/django/contrib/admin/__init__.py #line 29
| +
| |
| +->/django/utils/importlib.py # line 35
| +
| |
| +-->/todo/admin.py #line 1
| |
| +->from todo.models import List
| |
| |
+-----------+
Your admin
style is old, try new admin style.
Upvotes: 1
Reputation: 57198
The problem is that you're running admin.autodiscover()
from within your models
module, so the following happens during that call:
admin
modules in all installed apps, imports themadmin
modules are of course run right when each admin
is importedadmin
module imports from todo.models import List
(presumably)todo.models
module isn't available yet, because it was still being imported by load_app
(6th frame from the bottom of your traceback) when admin.autodiscover()
was run (3rd frame from the bottom of your traceback)tl;dr
You just have a circular import, but I wanted to explain it so that it was clear why.
Move admin.autodiscover()
to your main urls
module.
Upvotes: 2