代码之家  ›  专栏  ›  技术社区  ›  GabiMe

django admin:如何在模型中显示标记为editable=false的字段?

  •  84
  • GabiMe  · 技术社区  · 14 年前

    即使字段标记为 'editable=False' 在模型中,我希望管理页面显示它。目前它完全隐藏了字段。如何实现这一目标?

    2 回复  |  直到 9 年前
        1
  •  165
  •   mlissner    12 年前

    使用 Readonly Fields . 类似(对于Django>=1.2):

    class MyModelAdmin(admin.ModelAdmin):
        readonly_fields=('first',)
    
        2
  •  16
  •   Community CDub    8 年前

    更新

    如果希望在“管理”中保持字段可编辑,但在其他地方不可编辑,则此解决方案非常有用。如果要保持字段不可编辑 自始至终 然后@till backhaus' answer 是更好的选择。

    原始答案

    一种方法是使用自定义 ModelForm 在行政管理中。此表单可以覆盖所需字段以使其可编辑。因此你保留 editable=False 除了行政以外的任何地方。例如(用Django 1.2.3测试)

    # models.py
    class FooModel(models.Model):
        first = models.CharField(max_length = 255, editable = False)
        second  = models.CharField(max_length = 255)
    
        def __unicode__(self):
            return "{0} {1}".format(self.first, self.second)
    
    # admin.py
    class CustomFooForm(forms.ModelForm):
        first = forms.CharField()
    
        class Meta:
            model = FooModel
            fields = ('second',)
    
    class FooAdmin(admin.ModelAdmin):
        form = CustomFooForm
    
    admin.site.register(FooModel, FooAdmin)