【问题标题】:Python Error: name 'admin' is not definedPython 错误:未定义名称“管理员”
【发布时间】:2012-08-31 22:34:57
【问题描述】:

我是第一次在 Django 中创建 Python 应用程序。我知道我必须取消注释 urls.py 中的管理工具,我已经这样做了。我还添加了autodiscover。每次我尝试向管理面板添加新功能时,都会收到此错误:

"NameError: name 'admin' is not defined"

这是我在模型中使用的要添加到管理面板的代码:

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)

【问题讨论】:

  • 在您的 INSTALLED_APPS 中是 'django.contrib.admin' 吗?
  • 是的。我已经使用同样的方法在管理面板中添加了一个“投票”部分。现在不行了

标签: python django django-models django-admin django-urls


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      from django.conf.urls import  include, url
      from django.contrib import admin
      
      admin.autodiscover()
      urlpatterns = [
           url(r'^admin/', include(admin.site.urls)),
          ]
      

      【讨论】:

        【解决方案4】:

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

        在 ChoiceInLine 的父级中(您将在本教程中看到“admin.StackedInline”),StackedInline 中的 L 不应该大写……就这么简单……非常感谢 Karen Tracey。 ..

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

        【讨论】:

        • 这能回答问题吗? StackedInline 在问题中似乎大写正确。
        【解决方案5】:

        我怀疑您在定义ModelAdmin 类的模型文件中没有from django.contrib import adminclass ChoiceInline(admin.StackedInline):

        【讨论】:

          【解决方案6】:

          您应该将管理员代码(#COMMENTED OUT UNTIL I FIX THE ADMIN NAME 之后的所有内容)放入 admin.py

          【讨论】:

            【解决方案7】:

            为我解决这个问题的一种方法是在 admin.py 的开头添加它:

            from django.contrib import admin
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2022-12-18
              • 2014-11-23
              • 1970-01-01
              • 1970-01-01
              • 2019-11-13
              • 1970-01-01
              相关资源
              最近更新 更多