12
votes

Django Désactiver l'édition (mais autoriser l'ajout) dans la vue TabularInline

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 commentaires

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?


4 Réponses :


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

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

0 commentaires

1
votes

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 []


0 commentaires

1
votes

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]


0 commentaires

4
votes

Utilisateur Django admin Build in Function HAS_CHANGE_PERMISTION () et renvoie FALSE pour restreindre l'objet Editer la vue. XXX


0 commentaires