iCo*_*unk 33 django-models django-admin
在这张图片中,只有标题显示在这里,我用过:
def __unicode__(self):
return self.title;
Run Code Online (Sandbox Code Playgroud)
如何显示所有这些字段?
如何显示每个"模型"页面中的所有字段?
OBu*_*OBu 56
如果要在不键入所有字段名的情况下包含所有字段,则可以使用
list_display = BookAdmin._meta.get_all_field_names()
Run Code Online (Sandbox Code Playgroud)
缺点是,字段按排序顺序排列.
编辑:
Django 1.10中不推荐使用此方法.请参阅从旧API迁移以供参考.以下应该适用Django >= 1.9于大多数情况 -
list_display = [field.name for field in Book._meta.get_fields()]
Run Code Online (Sandbox Code Playgroud)
Ami*_*shk 42
默认情况下,admin布局仅显示从对象的unicode函数返回的内容.要显示其他内容,您需要在其中创建自定义管理表单app_dir/admin.py.
请参见:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display
您需要添加管理表单并设置list_display字段.
在您的具体示例中:
class BookAdmin(admin.ModelAdmin):
list_display = ('Title', 'Author', 'Price')
admin.site.register(Book, BookAdmin)
Run Code Online (Sandbox Code Playgroud)
Kri*_*isF 28
如果要包含除ManyToManyField字段名称之外的所有字段名称,并使它们与models.py文件中的顺序相同,则可以使用:
list_display = [field.name for field in Book._meta.fields if field.name != "id"]
Run Code Online (Sandbox Code Playgroud)
如你所见,我也排除了id.
如果你发现自己做了很多,你可以创建一个ModelAdmin的子类:
class CustomModelAdmin(admin.ModelAdmin):
def __init__(self, model, admin_site):
self.list_display = [field.name for field in model._meta.fields if field.name != "id"]
super(CustomModelAdmin, self).__init__(model, admin_site)
Run Code Online (Sandbox Code Playgroud)
然后继承自:
class BookAdmin(CustomModelAdmin):
pass
Run Code Online (Sandbox Code Playgroud)
或者你可以做一个混合:
class CustomModelAdminMixin(object):
def __init__(self, model, admin_site):
self.list_display = [field.name for field in model._meta.fields if field.name != "id"]
super(CustomModelAdminMixin, self).__init__(model, admin_site)
class TradeAdmin(CustomModelAdminMixin, admin.ModelAdmin):
pass
Run Code Online (Sandbox Code Playgroud)
如果要从admin.ModelAdmin以外的其他内容继承,mixin非常有用.
Dan*_*men 17
大多数这些答案的问题是,如果您的模型包含ManyToManyField或ForeignKey字段,它们就会中断。
对于真正的懒惰者,您可以在您的admin.py:
from django.contrib import admin
from my_app.models import Model1, Model2, Model3
@admin.register(Model1, Model2, Model3)
class UniversalAdmin(admin.ModelAdmin):
def get_list_display(self, request):
return [field.name for field in self.model._meta.concrete_fields]
Run Code Online (Sandbox Code Playgroud)
siv*_*anr 14
我发现OBu的回答对我来说非常有用.他提到了:
缺点是,字段按排序顺序排列.
对他的方法的一个小调整也解决了这个问题:
list_display = [f.name for f in Book._meta.fields]
Run Code Online (Sandbox Code Playgroud)
为我工作.
许多答案都被Django 1.10打破了.对于1.10或更高版本,这应该是
list_display = [f.name for f in Book._meta.get_fields()]
Run Code Online (Sandbox Code Playgroud)
这是我的方法,适用于任何模型类:
MySpecialAdmin = lambda model: type('SubClass'+model.__name__, (admin.ModelAdmin,), {
'list_display': [x.name for x in model._meta.fields],
'list_select_related': [x.name for x in model._meta.fields if isinstance(x, (ManyToOneRel, ForeignKey, OneToOneField,))]
})
Run Code Online (Sandbox Code Playgroud)
这将做两件事:
然后注册您的模型:
admin.site.register(MyModel, MySpecialAdmin(MyModel))
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用其他默认模型admin,请用admin基类替换'admin.ModelAdmin'
| 归档时间: |
|
| 查看次数: |
43343 次 |
| 最近记录: |