即使某个字段在模型中标记为'editable=False'
,我也希望管理页面能够显示它。目前它完全隐藏了这个领域..如何实现这一目标?
答案 0 :(得分:170)
使用Readonly Fields。像这样(对于django> = 1.2):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)
答案 1 :(得分:16)
<强>更新强>
如果您希望在Admin中保持字段可编辑但在其他任何位置不可编辑,则此解决方案非常有用。如果你想让整个中的字段不可编辑,那么@Till Backhaus'answer是更好的选择。
原始答案
执行此操作的一种方法是在管理员中使用自定义ModelForm
。此表单可以覆盖必填字段以使其可编辑。因此,除了管理员之外,您还可以在其他任对于例如(用Django 1.2.3测试)
editable=False
答案 2 :(得分:0)
您的只读字段也必须位于以下字段中:
tell application "System Events" to return ¬
the value of attribute "AXIndex" of ¬
(rows of table "Track List" of ¬
(windows of application process "Pro Tools" whose name contains "Mix:") ¬
whose value of attribute "AXSelected" is true)
答案 3 :(得分:0)
您还可以在模型中将只读字段设置为editable=False
(editable
here的Django文档参考)。然后在Admin中覆盖get_readonly_fields
方法。
# models.py
class MyModel(models.Model):
first = models.CharField(max_length=255, editable=False)
# admin.py
class MyModelAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
return [f.name for f in obj._meta.fields if not f.editable]
答案 4 :(得分:0)
使用上述解决方案,我能够显示多个对象的隐藏字段,但在尝试添加新对象时出现异常。
所以我对其进行了如下增强:
class HiddenFieldsAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
try:
return [f.name for f in obj._meta.fields if not f.editable]
except:
# if a new object is to be created the try clause will fail due to missing _meta.fields
return ""
在相应的 admin.py 文件中,我只需要导入新类并在注册新模型类时添加它
from django.contrib import admin
from .models import Example, HiddenFieldsAdmin
admin.site.register(Example, HiddenFieldsAdmin)
现在我可以在具有不可编辑字段的每个类中使用它,到目前为止我没有看到不需要的副作用。