django-admin list_display
时间: 2023-07-27 20:07:07 浏览: 168
`list_display` 是 Django 中的一个 ModelAdmin 类的属性,用于定义在管理页面中显示哪些字段。它是一个包含字段名称的元组或列表,可以包括模型中的任何字段、属性或方法。例如:
```python
from django.contrib import admin
from myapp.models import MyModel
class MyModelAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'description', 'created_at', 'is_active')
admin.site.register(MyModel, MyModelAdmin)
```
在上面的示例中,`list_display` 定义了在管理页面中显示的字段,包括 `id`、`name`、`description`、`created_at` 和 `is_active`。其中,`id` 是模型的默认主键字段,`name`、`description` 和 `is_active` 都是模型中的普通字段,`created_at` 是一个自定义的方法或属性,它返回该模型实例的创建时间。
相关问题
django admin.py list_display 显示外键
在 Django 的 admin.py 中,如果要在 list_display 中显示一个外键的相关字段,可以使用双下划线语法。例如,如果有一个名为 Book 的模型,并且它有一个外键字段 author,你可以这样在 BookAdmin 中的 list_display 中显示作者的名字:
```python
from django.contrib import admin
from .models import Book
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author__name')
admin.site.register(Book, BookAdmin)
```
其中,'author__name' 表示要显示作者的名字,其中的双下划线 '__' 表示要通过外键访问作者模型的 name 字段。需要注意的是,如果外键是多对多关系,则需要使用 'related_name' 来设置反向关联的名称,例如:
```python
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=50)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author, related_name='books')
```
在 BookAdmin 中,可以这样显示作者们的名字:
```python
class BookAdmin(admin.ModelAdmin):
def authors_name(self, obj):
return ', '.join([a.name for a in obj.authors.all()])
authors_name.short_description = 'Authors'
list_display = ('title', 'authors_name')
```
其中,'authors_name' 是一个自定义的方法,用来返回作者们的名字,然后在 list_display 中显示。需要注意的是,自定义的方法需要设置一个短描述 'short_description',用来在列表头部显示。
django-admin如何显示其他列的到自身表的列中
如果你想在 Django 的 admin 界面中,将一个表中的某个列显示为另外一个表中的列,可以通过 Django 的 `ForeignKey` 类型来实现。
以一个简单的示例为例,假设我们有一个 `Author` 表和一个 `Book` 表,其中 `Book` 表包含了一个外键列 `author_id`,表示该书的作者是哪个作者。我们希望在 `Book` 表的 admin 界面中,显示出该书的作者的姓名(即 `Author` 表中的 `name` 列)。
我们可以在 `Book` 表中定义一个 `ForeignKey` 类型的字段,将其关联到 `Author` 表,例如:
```python
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
# ...
```
然后,在 `Book` 表的 admin 界面中,我们可以通过 `list_display` 参数来指定要显示的列。在其中,我们可以通过 `__` 运算符来访问外键关联的表中的列,例如:
```python
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author_name')
def author_name(self, obj):
return obj.author.name
author_name.short_description = 'Author'
```
在上面的代码中,我们定义了一个 `BookAdmin` 类,并指定了要显示的列。其中,`author_name` 是一个自定义的方法,用来获取该书的作者的姓名。在该方法中,我们通过 `obj.author.name` 来访问外键关联的 `Author` 表中的 `name` 列,并将其返回。
最后,我们通过 `admin.site.register` 方法将 `Book` 表和 `BookAdmin` 类关联起来,使其能够在 admin 界面中显示:
```python
admin.site.register(Book, BookAdmin)
```
这样,在 `Book` 表的 admin 界面中,就会显示出每本书的作者的姓名了。
阅读全文