2010-08-18 17 views
25

Descubrí cuál era el problema al escribir esta pregunta. Lo publico de todos modos en caso de que pueda ayudar a alguien más.Django ModelAdmin - fieldsets ... campo 'fecha' faltante en el formulario

El error: 'FooAdmin.fieldsets [0] [1] [' fields ']' hace referencia al campo 'date' que falta en el formulario.

con el siguiente código:

# models.py 
from django.db import models 

class Foo(Base): 
    date = models.DateField(auto_now_add=True) 
    title = models.CharField(max_length=255) 

# admin.py 
from django.contrib import admin 

class FooAdmin(BaseAdmin): 
    list_display = ("title", "date") 
    fieldsets = (
     (None, { 
      "fields": ("date", "title") 
     }), 
    ) 

admin.site.register(Foo, FooAdmin) 
+2

Gracias por publicar aunque resolvió su problema, me encontré con este mismo problema a principios de esta semana. –

+0

¿Puedes eliminar la respuesta del cuerpo de la pregunta y publicarla por separado? A los clientes habituales de Stack Overflow (como yo) les será más fácil saber que esta pregunta es respondida, y también podemos votar su respuesta. Gracias por contribuir al sitio! –

+0

@Dominic: ¡Correcto! Lo siento. –

Respuesta

62

El error se debe a la fecha que tiene auto_now_add=True (o auto_now=True).
Como el valor es automático, no es editable, por lo que no está en el formulario. Para solucionar esto, añadir esto en FooAdmin:

readonly_fields = ("date",) 
+0

readonly_fields se introdujo en django 1.2, por lo que no funcionará en versiones anteriores. Pensé que valía la pena mencionarlo. – rombarcz

+2

Excelente trabajo para encontrar una solución simple a pesar del desagradable mensaje de error de Django. – Cerin

6

Mi problema era en realidad un poco diferente. Mi problema involucraba la herencia del modelo y el modelo de usuario django.contrib.admin.

Esto causó el problema:

from django.utils.translation import ugettext_lazy as _ 
from django.contrib.auth.admin import UserAdmin 
class AdminUser (UserAdmin): 
    fieldsets = UserAdmin.fieldsets + (
     (_('APPS Info'), {'fields': ('agency', 'company')}), 
    ) 

donde "agencia" y "compañía" son campos de mi modelo de usuario que se extiende modelo de usuario de Django. Su solución de poner esos campos en readonly_fields arregló el error, pero esos campos fueron de solo lectura, que no es lo que yo quería. Descubrí que el problema era que el ModelForm utilizado en django.contrib.admin estaba configurando el modelo para el modelo de usuario de Django. Así que para solucionarlo añadí esto:

from django.contrib.auth.admin import UserAdmin, UserChangeForm as DjangoUserChangeForm 
from django.utils.translation import ugettext_lazy as _ 
from apps_models.users.models import User 
class UserChangeForm(DjangoUserChangeForm): 
    class Meta: 
     model = User 
class AdminUser (UserAdmin): 
    fieldsets = UserAdmin.fieldsets + (
     (_('APPS Info'), {'fields': ('agency', 'company')}), 
    ) 
    form = UserChangeForm 

Eso es lo que me pasa por el uso de la herencia Modelo ... no es bonito, pero hizo el trabajo.

Parece que recibimos el mismo error, pero por diferentes motivos.

3

También puede ayudar a algunas personas a conocer el error también aparece cuando hay fieldsets incorrectas en el ModelAdmin, ... como cuando se hace migraciones y olvidarse de eliminar los campos eliminados ....

Cuestiones relacionadas