2010-06-01 11 views
8

Quiero deshabilitar la edición de TODOS los objetos dentro de una instancia de TabularInline en particular, al mismo tiempo que sigo permitiendo adiciones y al mismo tiempo permitir la edición del modelo principal.Django deshabilita la edición (pero permite agregar) en la vista TabularInline

tengo esta configuración trivial:

class SuperviseeAdmin(admin.TabularInline): 
    model = Supervisee 

class SupervisorAdmin(admin.ModelAdmin): 
    inlines = [SuperviseeAdmin] 

admin.site.register(Supervisor, SupervisorAdmin) 

He intentado agregar una función a has_change_permissionSuperviseeAdmin que devuelve False incondicionalmente, pero no tuvo ningún efecto.

He intentado configurar actions = None en SuperviseeAdmin pero no tuvo ningún efecto.

¿Qué podría estar pasando por alto que podría hacer que esto funcione?

+1

has_change_permission agregado al tronco (viene para 1.5)! –

+0

¿Alguna vez resolvió esto? – Amyth

+0

No lo hice, pero tampoco revisité con las versiones más nuevas de Django. Entonces, el comentario de @Ahmet Navrus de que esto estuvo disponible en 1.5 puede ser relevante. – VoteyDisciple

Respuesta

-3
class SuperviseeAdmin(admin.TabularInline): 
    model = Supervisee 

    def __init__(self, *args, **kwargs): 
     super(SuperviseeAdmin, self).__init__(*args, **kwargs) 
     self.list_display_links = (None,) 
+0

provoca error en 1.3 –

0

Ver esta solución: Django admin: make field editable in add but not edit

Anulación get_readonly_fields método:

def get_readonly_fields(self, request, obj=None): 
    if obj: # obj is not None, so this is an edit 
     return ['name1',..] # Return a list or tuple of readonly fields' names 
    else: # This is an addition 
     return [] 
+3

No funciona en línea –

0

Usted puede intentar crear una clase en línea por separado (ver la InlineModelAdmin docs) que utiliza un encargo ModelForm donde puede personalizar la el método clean para lanzar un error al intentar actualizar:

from django.contrib import admin 
from django.core.exceptions import ValidationError 
from django.forms import ModelForm 

from myapp.models import Supervisee 


class SuperviseeModelForm(ModelForm): 
    class Meta(object): 
     model = Supervisee 
     # other options ... 

    def clean(self): 
     if self.instance.pk: 
      # instance already exists 
      raise ValidationError('Update not allowed') 
     # instance doesn't exist yet, continue 
     return super(SuperviseeModelForm, self).clean() 


class SuperviseeInline(admin.TabularInline): 
    model = Supervisee 
    form = SuperviseeModelForm 


class SuperviseeAdmin(admin.ModelAdmin): 
    inlines = [SuperviseeInline] 
Cuestiones relacionadas