Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django admin中隐藏特定记录的字段?_Python_Django_Django Admin - Fatal编程技术网

Python 如何在django admin中隐藏特定记录的字段?

Python 如何在django admin中隐藏特定记录的字段?,python,django,django-admin,Python,Django,Django Admin,如何在djano admin中隐藏特定记录的字段? 例如,如果我有一个模型 class Book(models.Model): title = models.CharField(..., null=True) author = models.CharField(...) 我想在管理面板中隐藏pk=1的记录的作者。我发现解决办法是 class BookAdmin(admin.ModelAdmin): list_display = ("pk", "get_title_or_

如何在djano admin中隐藏特定记录的字段? 例如,如果我有一个模型

class Book(models.Model):
    title = models.CharField(..., null=True)
    author = models.CharField(...)
我想在管理面板中隐藏pk=1的记录的作者。我发现解决办法是

class BookAdmin(admin.ModelAdmin):
    list_display = ("pk", "get_title_or_nothing")

    def get_form(self, request, obj=None, **kwargs):
        if obj.pk == "1":
            self.exclude = ("author", )
        form = super(BookAdmin, self).get_form(request, obj, **kwargs)
        return form

它工作得很好,直到我从pk==1的记录返回到其他记录,在这种情况下,表中的所有记录都隐藏了author字段

发生这种情况的原因是,一旦
“author”
字段附加到
self.exclude
,它就会留在那里

对于Django>=1.11:

动态排除字段的更好位置是。它是在Django 1.11中引入的

def get_exclude(self, request, obj=None, **kwargs):
    if obj and obj.pk == 1:
        # don't modify self.exclude
        # instead return it with the extra added field
        return self.exclude + ('author',)
    return self.exclude

对于Django<1.11:

对于旧版本,您可以执行以下操作:

class BookAdmin(...):
    exclude = (# common excluded fields)
    original_exclude = exclude

def get_form(self, request, obj=None, **kwargs):
    if obj and obj.pk == 1:
        self.exclude += ('author',)
    else:
        # change it back to the original_exclude
        # for other objects
        self.exclude = self.original_exclude
    form = super(BookAdmin, self).get_form(request, obj, **kwargs)
    return form

不幸的是,我在
ModelAdmin
类中遇到一个类型错误:“不支持+:'NoneType'和'tuple'@Popka Set
exclude=()
,然后重试。