2010-06-01 11 views
8

Ich möchte deaktivieren Bearbeiten aller Objekte innerhalb einer bestimmten TabularInline-Instanz, während immer noch erlaubt Ergänzungen und während noch Bearbeitung des übergeordneten Modells erlauben.Django deaktivieren Bearbeitung (aber erlauben Hinzufügen) in TabularInline view

Ich habe diese triviale Setup:

class SuperviseeAdmin(admin.TabularInline): 
    model = Supervisee 

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

admin.site.register(Supervisor, SupervisorAdmin) 

ich versucht habe, eine has_change_permission Funktion SuperviseeAdmin hinzufügen, die False bedingungslos zurück, aber es hatte keine Wirkung.

Ich habe versucht, actions = None in SuperviseeAdmin, aber es hatte keine Wirkung.

Was könnte ich übersehen, dass dies funktionieren könnte?

+1

has_change_permission zum Trunk hinzugefügt (für 1.5)! –

+0

hast du jemals das lösen? – Amyth

+0

habe ich nicht, aber ich habe auch nicht mit neueren Versionen von Django revisited. Der Kommentar von @Ahmet Navrus, dass dies in 1.5 verfügbar wurde, könnte relevant sein. – VoteyDisciple

Antwort

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

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

erhöht Fehler in 1.3 –

0

Sehen Sie diese Lösung: Django admin: make field editable in add but not edit

Aufschalten get_readonly_fields Methode:

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

Nicht in einem Inline-Modus –

0

Sie können versuchen, eine separate Inline-Klasse erstellen (siehe InlineModelAdmin docs), die verwendet eine benutzerdefinierte ModelForm, wo Sie die besonders anfertigen Die clean Methode, um einen Fehler beim Versuch zu aktualisieren:

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] 
Verwandte Themen