Python 如何在django admin中隐藏特定记录的字段?
如何在djano 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_
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 Setexclude=()
,然后重试。