如何在django-admin中隐藏一些字段?

pmo*_*niq 54 django django-admin

class Book(models.Model):
    title = models.CharField(..., null=True)
    type = models.CharField(...)
    author = models.CharField(...)
Run Code Online (Sandbox Code Playgroud)

我在models.py中有一个简单的类.在管理员中,我希望在保存的书的类型为1时隐藏书的标题(在书的详细信息表格中).如何以最简单的方式进行?

Lor*_*uer 114

对于Django> 1.8,可以直接设置要在admin中排除的字段:

 class PostCodesAdmin(admin.ModelAdmin):
      exclude = ('pcname',)
Run Code Online (Sandbox Code Playgroud)

通过设置Field属性,可以在Django的ORM中直接定义隐藏字段: editable = False

例如

class PostCodes(models.Model):
  gisid  = models.IntegerField(primary_key=True)
  pcname = models.CharField(max_length=32, db_index=True, editable=False)
  ...
Run Code Online (Sandbox Code Playgroud)

但是,直接设置或更改模型的字段可能并不总是可行或有利的.原则上,以下admin.py设置可以工作,但不会因为排除是InlineModelAdmin选项.

class PostCodesAdmin(admin.ModelAdmin):
     exclude = ('pcname',)
....
Run Code Online (Sandbox Code Playgroud)

至少在Django 1.4(以及可能的更新版本号)中工作的解决方案是:

class PostCodesAdmin(admin.ModelAdmin):
  def get_form(self, request, obj=None, **kwargs):
      form = super(PostCodesAdmin, self).get_form(request, obj, **kwargs)
      del form.base_fields['enable_comments'] 
      return form
Run Code Online (Sandbox Code Playgroud)

对于项目的管理列表视图,只需省略不需要的字段即可:例如

class PostCodesAdmin(admin.ModelAdmin):
  list_display = ('id', 'gisid', 'title', )
Run Code Online (Sandbox Code Playgroud)

  • 在Django 1.8中,exclude =('fieldname',)与admin.ModelAdmin一起使用,因此不再需要继承InlineModelAdmin. (3认同)

Ale*_*nov 23

你要在你的模块中创建admin.py(可能是)

class BookAdmin(admin.ModelAdmin):
    list_display = ("pk", "get_title_or_nothing")
Run Code Online (Sandbox Code Playgroud)

Book类中:

class Book:
    ...
    def get_title_or_nothing(self):
        if self.type == WEIRD_TYPE:
            return ""
        return self.title
Run Code Online (Sandbox Code Playgroud)

更新:

class BookAdmin(admin.ModelAdmin):
    list_display = ("pk", "get_title_or_nothing")

    def get_form(self, request, obj=None, **kwargs):
        if obj.type == "1":
            self.exclude = ("title", )
        form = super(BookAdmin, self).get_form(request, obj, **kwargs)
        return form
Run Code Online (Sandbox Code Playgroud)

  • 真的,在这种情况下不能使用 django-admin 吗? (2认同)

小智 8

class BookAdmin(admin.ModelAdmin):
    exclude = ("fieldname",)  # hide fields which you want
Run Code Online (Sandbox Code Playgroud)