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)
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)
小智 8
class BookAdmin(admin.ModelAdmin):
exclude = ("fieldname",) # hide fields which you want
Run Code Online (Sandbox Code Playgroud)