Django在表格行视图中禁用编辑(但允许添加)

Django在表格行视图中禁用编辑(但允许添加),django,django-admin,Django,Django Admin,我想禁用编辑特定Tablerinline实例中的所有对象,同时仍然允许添加和编辑父模型 我有一个简单的设置: class SuperviseeAdmin(admin.TabularInline): model = Supervisee class SupervisorAdmin(admin.ModelAdmin): inlines = [SuperviseeAdmin] admin.site.register(Supervisor, SupervisorAdmin) 我尝试将has

我想禁用编辑特定Tablerinline实例中的所有对象,同时仍然允许添加和编辑父模型

我有一个简单的设置:

class SuperviseeAdmin(admin.TabularInline):
  model = Supervisee

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

admin.site.register(Supervisor, SupervisorAdmin)
我尝试将
has\u change\u permission
函数添加到
superveeadmin
中,该函数无条件返回
False
,但没有效果

我曾尝试在
superveeadmin
中设置
actions=None
,但没有效果

我可能忽略了什么可以让它工作?

请参阅此解决方案:

class SuperviseeAdmin(admin.TabularInline):
  model = Supervisee

  def __init__(self, *args, **kwargs):
        super(SuperviseeAdmin, self).__init__(*args, **kwargs)
        self.list_display_links = (None, )
重写get_readonly_字段方法:

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

您可以尝试创建一个单独的内联类(请参阅),该类使用自定义的
ModelForm
,您可以自定义
clean
方法,以便在尝试更新时引发错误:

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]

用户django admin内置函数具有_change_permission()并返回false以限制对象编辑视图

class SuperviseeAdmin(admin.TabularInline):
  model = Supervisee

  def has_change_permission(self, request):
      return False

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

admin.site.register(Supervisor, SupervisorAdmin)

是否已将更改权限添加到中继(适用于1.5版本)!你曾经解决过这个问题吗?我没有,但我也没有使用Django的新版本重新访问。所以@Ahmet Navrus在1.5版本中的评论可能是相关的。有人能解决这个问题吗?