【问题标题】:How to allow to edit field in django admin list depending on a value?如何允许根据值编辑 django 管理列表中的字段?
【发布时间】:2020-11-28 17:44:25
【问题描述】:

如果字段的值不等于 0,我需要允许更改它。 我发现我需要覆盖 get_changelist_form 但不知道如何。

我试图覆盖表单,但它引发了Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form OrderChangeListForm needs updating.

我需要什么:

def get_changelist_form(self, request, **kwargs):
  # if instance.status == 0 make it not editable
  return super(MyModelAdmin, self).get_changelist_form(request, **kwargs)

我的模特:

class ModelAdmin (admin.ModelAdmin):

    list_display = ['id', 'client', 'status']
    list_editable = ('status',)

【问题讨论】:

  • 是错字吗?你应该在 admin.py 中有 MyModelAdmin,对吧?

标签: django django-forms django-admin


【解决方案1】:

你必须在管理员中使用 has_change_permission 方法

admin.py

from django.contrib import admin

from .models import YourModel

class YourModel(admin.ModelAdmin):

    def has_change_permission(self, request, obj: YourModel= YourModel):
        if obj.num == 0:
            return False
        else:
            return True

admin.site.register(YourModel, YourModelAdmin)

只需将 YourModel 更改为您的模型名称

注意:如果您的状态字段类型是字符串(如 CharField),则必须替换:

if obj.num == 0:

与:

if obj.num == '0':

【讨论】:

  • 我需要有可能限制 django 模型视图列表中某些实例的更改权限
猜你喜欢
  • 2015-05-21
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
相关资源
最近更新 更多