2012-09-07 199 views
11

我正在第一次在Django中创建一个Python应用程序。我知道我必须取消对urls.py中的管理工具的评论,我已经这样做了。我还添加了autodiscover。每次我尝试了新的功能添加到管理面板,我得到这个错误:Python错误:未定义名称'admin'

“NameError:名‘admin’没有定义”

这里是我用我的模型添加到代码管理面板:

class ChoiceInline(admin.StackedInline): 
    model = Choice 
    extra = 3 

    class PollAdmin(admin.ModelAdmin): 
    fieldsets = [ 
     (None,    {'fields': ['question']}), 
     ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), 
    ] 
    inlines = [ChoiceInline] 

这里是在Python端的代码,我使用

admin.site.register(Poll, PollAdmin) 

,这里是从我的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('', 
    # Examples: 
    # url(r'^$', 'iFriends.views.home', name='home'), 
    # url(r'^iFriends/', include('iFriends.foo.urls')), 

    # 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)), 
    ) 

任何人都知道为什么它不能找到管理员名称?

编辑

这是我整个模型文件:

from django.db import models 

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 
    def __unicode__(self): 
     return self.question 
    def was_published_recently(self): 
     return self.pub_date >= timezone.now() - datetime.timedelta(days=1) 

    class Choice(models.Model): 
    poll = models.ForeignKey(Poll) 
    choice_text = models.CharField(max_length=200) 
    votes = models.IntegerField() 
    def __unicode__(self): 
     return self.choice_text 


#COMMENTED OUT UNTIL I FIX THE ADMIN NAME 
from django.config import admin 

class ChoiceInline(admin.StackedInline): 
    model = Choice 
    extra = 3 

    class PollAdmin(admin.ModelAdmin): 
    fieldsets = [ 
     (None,    {'fields': ['question']}), 
     ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), 
    ] 
    inlines = [ChoiceInline] 

#ADD THIS TO THE MAIN PYTHON FUNCTION 
admin.site.register(Poll, PollAdmin) 
+1

是“Django的.contrib.admin'在INSTALLED_APPS中? – Marat

+0

是的,是的。我已经使用相同的方法在管理面板中添加了“民意调查”部分。现在不起作用 –

回答

0

我怀疑你没有from django.contrib import admin在你定义ModelAdmin类,class ChoiceInline(admin.StackedInline):模型文件。

+0

是的,请看我的编辑。 –

0

你应该把管理员密码(#COMMENTED之后一切,直到我定的管理员名称),以admin.py的

8

from django.config import admin应该from django.contrib import admin

4

**url.py**文件的顶部,添加以下代码

from django.contrib import admin 
admin.autodiscover() 

所以特定块应该看起来像下面


from django.conf.urls import patterns, include, url 
**from django.contrib import admin 
admin.autodiscover()** 

# Uncomment the next two lines to enable the admin: 
# from django.contrib import admin 
# admin.autodiscover() 

urlpatterns = patterns('', 
    # Examples: 
    # url(r'^$', 'examplesite.views.home', name='home'), 
    # url(r'^examplesite/', include('examplesite.foo.urls')), 

    # 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)),** 

) 
1

经过漫长而痛苦的追求解决这个愚蠢的问题,我终于遇到了答案!另一个Django程序员遇到了同样的问题,并发现:

在ChoiceInLine的父亲(本教程中您将看到“admin.StackedInline”),L的StackedInline不应该被大写......它是就这么简单......三江源这么多克伦特雷西...

http://grokbase.com/p/gg/django-users/133v4wx0sx/django-1-5-tutorial-error-module-has-no-attribute-stackedinline

+0

这是回答这个问题吗? 'StackedInline'似乎在问题中正确地大写。 –

1

我改变我的urls.py这样的...这应该是基本的格式

from django.conf.urls import include, url 
from django.contrib import admin 

admin.autodiscover() 
urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    ]