2010-01-29 28 views
10

Uso this snippet para mostrar varios campos en mi administración como readonly, pero como se notó en los comentarios, no funciona en stackline/tabularinline. ¿Hay alguna otra forma de lograr esto? Tengo una lista de objetos adjuntados a un modelo y solo quiero mostrarlos en la vista de detalles del modelo sin la posibilidad de cambiar los valores.Campos de solo lectura en django admin/inline

Respuesta

17

Si está ejecutando Django 1.3 o posterior; hay un atributo llamado ModelAdmin.readonly_fields que puede usar.

InlineModelAdmin hereda de ModelAdmin, por lo que debería poder usarlo de su subclase en línea.

+0

gracias por su respuesta, por desgracia, es un sistema productivo donde no puedo utilizar un dev-versión. – schneck

+0

FYI: esto parece estar en producción ahora (Django 1.3 tiene) –

+0

Gracias por notarlo. He actualizado la respuesta en consecuencia. :) – drmegahertz

2

He encontrado el mismo problema hoy. Aquí está mi solución. Esto es ejemplo de campo de sólo lectura para el valor ForeignKey:

class MySelect(forms.Select): 
    def render(self, name, value, attrs=None, choices=()): 
     s = Site.objects.get(id=value) 
     return s.name 

class UserProfileInlineForm(forms.ModelForm): 
    site = forms.ModelChoiceField(queryset=Site.objects.all(), widget=MySelect) 

class UserProfileInline(admin.StackedInline): 
    model = UserProfile 
    form = UserProfileInlineForm 
0

Como es el caso con jQuery, parece que se puede lograr esto mediante la modificación de una attr llamada "discapacidad" (funciona en mi Safari, OK nosotros' re ahora en 2013 :-)). Ejemplo a continuación:

def get_form(self, request, obj=None, **kwargs): 
     result = super(<your ModelAdmin class here>, self).get_form(request, obj=obj, **kwargs) 
     result.base_fields[<the select field you want to disable>].widget.attrs['disabled'] = 'disabled' 
     return result 
Cuestiones relacionadas