Django管理员,如何在查看和编辑期间隐藏特定模型字段
我有一个django模型a,这个模型在django管理员上注册,管理员用户可以在那里添加/编辑数据Django管理员,如何在查看和编辑期间隐藏特定模型字段,django,python-3.x,django-models,django-admin,Django,Python 3.x,Django Models,Django Admin,我有一个django模型a,这个模型在django管理员上注册,管理员用户可以在那里添加/编辑数据 #models.py class A(models.Model): eth_address = models.CharField( max_length=100) private_key = encrypt(max_length=100)) 现在我希望,一旦数据添加到数据库中,在编辑或查看时,我不希望私有密钥字段在UI上可见 我尝试在admin中使用以下代码段: #admin.p
#models.py
class A(models.Model):
eth_address = models.CharField( max_length=100)
private_key = encrypt(max_length=100))
现在我希望,一旦数据添加到数据库中,在编辑或查看时,我不希望私有密钥字段在UI上可见
我尝试在admin中使用以下代码段:
#admin.py
...
def get_form(self, request, obj=None, **kwargs):
self.exclude = ("private_key", )
form = super(AAdmin, self).get_form(request, obj, **kwargs)
return form
...
但是,如果我在编辑视图中打开一个模型并点击保存,它会将数据库中的private_key替换为NULL,这意味着这个值没有从前端传递过来,这是真的,因为我们排除了该字段,但是在保存时它的值被覆盖为NULL,你知道如何解决这个问题吗?为了隐藏该字段,覆盖ModelAdmin类上的
change\u视图
,并排除该字段
def change_view(self, request, object_id, extra_context=None):
self.exclude = ('private_key', )
return super().change_view(request, object_id, extra_context)
如果要在编辑时以只读方式查看它,则需要覆盖get\u readonly\u fields
函数,如
def get_readonly_fields(self, request, obj=None):
if obj:
return ['private_key',]
else:
return []
因此,您需要检查obj是否已经存在,这使其成为一个编辑,并根据您的问题将私钥添加到只读字段中。我相信您希望“私钥”仅在创建对象时可见 您可以重写get_fields方法。如果您希望“private_key”仅在创建对象时可见,您可以执行以下操作 如果您有“私钥”,并且希望将其从列表显示中删除,请从列表显示中删除“私钥”。如果要在列表视图中显示,请添加到列表显示
class AModelAdmin(admin.ModelAdmin):
list_display = ['eth_address']
def get_fields(self, request, obj=None):
fields = super().get_fields(request, obj)
if obj:
fields.remove('private_key')
return fields
admin.site.register(A, AAdmin)
尝试在
admin.py
中添加list\u display=['eth\u address']
我不想在列表中显示它这将在排除实例字段中添加该字段,下次它将不会出现在板条箱视图页面上。