我有一个Django模型 A ,该模型在django管理员上注册,管理员用户可以在其中添加/编辑数据。
#models.py
class A(models.Model):
eth_address = models.CharField( max_length=100)
private_key = encrypt(max_length=100))
现在,我希望将数据添加到数据库后,在编辑或查看时,我不希望private_key字段在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
...
但是,如果我在编辑视图中打开模型并单击保存,它将db中的private_key替换为NULL,这意味着该值未从前端传递,这是正确的,因为我们排除了该字段,但是在保存时它的值被覆盖为NULL,您知道如何解决此问题吗?
答案 0 :(得分:0)
要隐藏该字段,请在ModelAdmin类上覆盖change_view
并排除该字段
def change_view(self, request, object_id, extra_context=None):
self.exclude = ('private_key', )
return super().change_view(request, object_id, extra_context)
如果要在编辑时以只读方式查看它,则要覆盖get_readonly_fields
函数,例如
def get_readonly_fields(self, request, obj=None):
if obj:
return ['private_key',]
else:
return []
因此您检查obj是否已经存在,从而对其进行编辑,然后将private_key添加到只读字段中
答案 1 :(得分:0)
根据您的问题,我相信您只希望在创建对象时才能看到“ private_key”。
您可以重写get_fields方法。如果您希望“ private_key”仅在创建Object时可见,则可以执行以下操作。
从列表显示中删除“ private_key”(如果有的话),并且还希望从列表显示中删除它。如果要在列表视图中显示,请添加到list_display。
//add a port
var port = {
id: "my_port_id"
};
var sourceElement = this.findElement(my_element_id);
sourceElement.addPort(port);
sourceElement.portProp("my_port_id", "attrs/circle/fill", "#f2f2f2");
sourceElement.portProp("my_port_id", "attrs/label/position/name", "outsideOriented");
sourceElement.portProp("my_port_id", "attrs/text/text", "some port label");
//add link
var link = new joint.dia.Link({
source: {
id: sourceElement.Id,
port: "my_port_id"
},
target: {
id: targetElement.id
}
});
this.graph.addCell(link);