第一次保存 object 时,使 django 模型字段只读或在管理员中禁用
make django model field read only or disable in admin while saving the object first time
我想在最初保存时禁用 django 管理中模型中的几个字段。
"<input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">"
像这样。
我的模型是:
class Blogmodel(models.Model):
tag = models.ForeignKey(Tag)
headline = models.CharField(max_length=255)
image=models.ImageField(upload_to=get_photo_storage_path, null=True, blank=False)
body_text = models.TextField()
pub_date = models.DateField()
authors = models.ForeignKey(Author)
n_comments = models.IntegerField()
我想禁用 "headline" 和 "n_comments"。
我在 admin.py 文件中尝试过,但它没有在初始保存时禁用字段。但是为了编辑其工作的字段,它使字段只读。
在 admin.py
class ItemAdmin(admin.ModelAdmin):
exclude=("headline ",)
def get_readonly_fields(self, request, obj=None):
if obj:
return ['headline']
else:
return []
标题被禁用但仅供编辑。我想在创建 object 时禁用它。即首先保存。
有人可以指导我吗?
如果你想在创建过程中将字段设置为只读,你应该反过来做:
def get_readonly_fields(self, request, obj=None):
if obj is None:
return ['headline']
return []
为了在保存初始对象时禁用它以及为了编辑我们也可以这样做
class ItemAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
if obj is None:
return ['headline']
else:
return ['headline']
return []
对我有用。
不需要覆盖get_readonly_fields
。最简单的解决方案是:
class ItemAdmin(admin.ModelAdmin):
exclude=("headline ",)
readonly_fields=('headline', )
当使用 readonly_fields
时,您不能覆盖 get_readonly_fields
,因为默认实现读取 readonly_fields 变量。因此,仅当您必须有一些逻辑来决定哪个字段应该是只读的时候才重写它。
其他方式是:
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj=None, **kwargs)
if obj is None:
form.base_fields["my_field"].disabled = True
return form
只做editable=False,同时在模型中添加字段
headline = models.CharField(max_length=255,editable=False)
它不可编辑,您无法从管理面板中看到该字段,但您可以从模型中的方法向它们添加值
我想在最初保存时禁用 django 管理中模型中的几个字段。
"<input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">"
像这样。
我的模型是:
class Blogmodel(models.Model):
tag = models.ForeignKey(Tag)
headline = models.CharField(max_length=255)
image=models.ImageField(upload_to=get_photo_storage_path, null=True, blank=False)
body_text = models.TextField()
pub_date = models.DateField()
authors = models.ForeignKey(Author)
n_comments = models.IntegerField()
我想禁用 "headline" 和 "n_comments"。 我在 admin.py 文件中尝试过,但它没有在初始保存时禁用字段。但是为了编辑其工作的字段,它使字段只读。
在 admin.py
class ItemAdmin(admin.ModelAdmin):
exclude=("headline ",)
def get_readonly_fields(self, request, obj=None):
if obj:
return ['headline']
else:
return []
标题被禁用但仅供编辑。我想在创建 object 时禁用它。即首先保存。 有人可以指导我吗?
如果你想在创建过程中将字段设置为只读,你应该反过来做:
def get_readonly_fields(self, request, obj=None):
if obj is None:
return ['headline']
return []
为了在保存初始对象时禁用它以及为了编辑我们也可以这样做
class ItemAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
if obj is None:
return ['headline']
else:
return ['headline']
return []
对我有用。
不需要覆盖get_readonly_fields
。最简单的解决方案是:
class ItemAdmin(admin.ModelAdmin):
exclude=("headline ",)
readonly_fields=('headline', )
当使用 readonly_fields
时,您不能覆盖 get_readonly_fields
,因为默认实现读取 readonly_fields 变量。因此,仅当您必须有一些逻辑来决定哪个字段应该是只读的时候才重写它。
其他方式是:
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj=None, **kwargs)
if obj is None:
form.base_fields["my_field"].disabled = True
return form
只做editable=False,同时在模型中添加字段
headline = models.CharField(max_length=255,editable=False)
它不可编辑,您无法从管理面板中看到该字段,但您可以从模型中的方法向它们添加值