如何在django-admin中隐藏特定记录的字段?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在django-admin中隐藏特定记录的字段?相关的知识,希望对你有一定的参考价值。
如何在django-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"
字段被附加到self.exclude
,它就会停留在那里。
对于Django> = 1.11:
在ModelAdmin.get_exclude
中更好地动态排除字段。它是在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
以上是关于如何在django-admin中隐藏特定记录的字段?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ajax 在 Django-admin 表格内联中读取/写入输入字段?