2012-09-07 18 views
11

Estoy creando una aplicación de Python en Django por primera vez. Sé que debo descomentar las herramientas de administración en urls.py, lo he hecho. También he agregado autodiscover. Cada vez que intento añadir una nueva función para el panel de administración, me sale este error:Error de Python: el nombre 'admin' no está definido

"NameError: nombre 'admin' no está definido"

Aquí está el código que estoy utilizando en mi modelo para añadir a el panel de administración:

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] 

aquí está el código en el terminal de pitón estoy usando

admin.site.register(Poll, PollAdmin) 

y aquí está el código de mi 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)), 
    ) 

¿Alguien tiene alguna idea de por qué no puede encontrar el nombre del administrador?

EDITAR

Aquí es toda mi archivo de modelo:

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

es Django' .contrib.admin 'en su INSTALLED_APPS? – Marat

+0

sí, lo es. Ya he agregado una sección "Encuestas" al panel de administración utilizando este mismo método. Ahora no está funcionando –

Respuesta

0

sospecho que no tiene from django.contrib import admin en su archivo de modelo en el que se ha definido ModelAdmin clases, class ChoiceInline(admin.StackedInline):.

+0

Sí, tengo, por favor, mira mi edición. –

0

debe colocar la clave de administrador (después de todo #COMMENTED OUT HASTA QUE fijar el nombre ADMIN) a admin.py

8

from django.config import admin debería ser from django.contrib import admin

4

en la parte superior de su archivo **url.py**, añada el siguiente código

from django.contrib import admin 
admin.autodiscover() 

Por lo tanto, ese bloque particular, debería parecerse a la siguiente


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

¡Bien después de una larga y agónica misión para solucionar este estúpido problema, FINALMENTE encontré la respuesta! Otro programador de Django se encontró con el mismo problema y encontró esto:

EN EL PADRE DE ChoiceInLine (que verá como 'admin.StackedInline' en el tutorial), THE L IN StackedInline NO DEBE SER CAPITALIZADO ... Es tan simple como eso ... Gracias tanto Karen Tracey ...

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

+0

¿Responde esto a la pregunta? 'StackedInline' parece estar en mayúscula correctamente en la pregunta. –

1

cambio mi urls.py como este ... este debe ser el formato básico

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

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