Gau*_*rav 12 python django django-admin django-admin-actions
我想在最初保存时禁用django admin中的模型中的几个字段.
"<input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">"
Run Code Online (Sandbox Code Playgroud)
像这样.
我的模型是:
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()
Run Code Online (Sandbox Code Playgroud)
我想禁用"标题"和"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 []
Run Code Online (Sandbox Code Playgroud)
标题被禁用但仅限编辑.我想在创建对象时禁用它.即先保存.任何人都可以指导我吗?
Gwy*_*idD 47
没有必要覆盖get_readonly_fields.最简单的解决方案是:
class ItemAdmin(admin.ModelAdmin):
exclude=("headline ",)
readonly_fields=('headline', )
Run Code Online (Sandbox Code Playgroud)
使用readonly_fields时无法覆盖get_readonly_fields,因为默认实现读取readonly_fields变量.因此,只有在确定哪个字段应该是只读时才必须有一些逻辑才能覆盖它.
小智 11
只需执行 editable=False,同时在模型中添加字段
headline = models.CharField(max_length=255,editable=False)
Run Code Online (Sandbox Code Playgroud)
它不可编辑,您无法从管理面板看到该字段,但您可以通过模型中的方法向它们添加值
如果你想在创建过程中使字段为只读,你应该反过来做:
def get_readonly_fields(self, request, obj=None):
if obj is None:
return ['headline ']
return []
Run Code Online (Sandbox Code Playgroud)
小智 5
其他方式是:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20017 次 |
| 最近记录: |