Je veux désactiver la modification de tous les objets dans une instance de tabularine particulière, tout en permettant des ajouts et tout en permettant toujours l'édition du modèle parent.
J'ai cette configuration triviale: p>
class SuperviseeAdmin(admin.TabularInline): model = Supervisee class SupervisorAdmin(admin.ModelAdmin): inlines = [SuperviseeAdmin] admin.site.register(Supervisor, SupervisorAdmin)
4 Réponses :
class SuperviseeAdmin(admin.TabularInline): model = Supervisee def __init__(self, *args, **kwargs): super(SuperviseeAdmin, self).__init__(*args, **kwargs) self.list_display_links = (None, )
Voir cette solution: Django admin: Fabrication de champ Éditable dans Ajouter mais non modifier
Supprimer get_readonly_fields Méthode: P>
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 []
Vous pouvez essayer de créer une classe intégrée séparée (voir le inlinemodeladmin code> docs
) qui utilise un Modelform code personnalisé> où vous pouvez personnaliser la méthode
propre code> pour lancer une erreur lorsque Essayer de mettre à jour:
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]
Utilisateur Django admin Build in Function HAS_CHANGE_PERMISTION () et renvoie FALSE pour restreindre l'objet Editer la vue.
has_change_permission ajouté au coffre (à venir pour 1.5)!
Avez-vous déjà rencontré cela?
Je n'ai pas fait, mais je n'ai pas non plus revu avec de nouvelles versions de Django. Donc, le commentaire de @Ahmet Navrus selon lequel cela est devenu disponible en 1,5 peut être pertinent.
Quelqu'un pourrait résoudre ce problème?