首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django Admin -如何显示ManyToManyField值

在Django的Admin界面中,默认情况下,ManyToManyField字段会显示为一个选择框,允许你添加或移除关联的对象。如果你想要在Admin界面中以更友好的方式显示ManyToManyField的值,可以通过自定义Admin类来实现。

基础概念

ManyToManyField是Django中的一个字段类型,用于表示多对多的关系。例如,一篇文章可以有多个作者,一个作者也可以写多篇文章。

相关优势

  • 灵活性:允许任意数量的关联对象。
  • 简洁性:在模型定义中直接声明关系,简化了数据库设计。

类型与应用场景

  • 类型:Django内置的ManyToManyField
  • 应用场景:适用于需要表示多对多关系的场景,如文章与作者、学生与课程等。

遇到的问题与解决方法

如果你想要在Admin界面中显示ManyToManyField的值而不是默认的选择框,可以通过重写Admin类的list_display属性和使用自定义方法来实现。

示例代码

假设我们有两个模型:AuthorBook,其中Book有一个ManyToManyField指向Author

代码语言:txt
复制
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)

在Admin中显示Bookauthors字段:

代码语言:txt
复制
from django.contrib import admin
from .models import Book

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'display_authors')

    def display_authors(self, obj):
        return ", ".join([author.name for author in obj.authors.all()])
    display_authors.short_description = 'Authors'

admin.site.register(Book, BookAdmin)

解释

  • list_display:这个属性定义了在Admin列表页面中显示哪些字段。
  • display_authors方法:这个自定义方法用于获取并显示所有关联的作者名字,并用逗号分隔。
  • short_description:这个属性用于设置Admin界面中显示的列标题。

通过这种方式,你可以在Django Admin中以更直观的方式展示ManyToManyField关联的对象,而不是仅仅显示它们的ID或默认的选择框。

这种方法不仅提高了数据的可读性,还增强了用户体验,使得管理后台的操作更加便捷。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • django入门:Admin管理系统及表单(干货)

    这一部分将介绍 django 自带的后台管理系统,以及如何通过表单提交数据 django admin 后台管理系统 在后台管理系统注册创建的模型 from django.contrib import admin...admin 主界面 当然,django 自带的 admin 管理系统不止那么点功能,接着我们通过定义一些参数,来定制 admin 界面 自定义 admin # 在使用后台管理的时候,可能需要自己定制...admin 的显示内容,可以通过如下进行定制 @admin.register(Post) class PostAdmin(admin.ModelAdmin) list_display = ['title...class CategoryAdmin(admin.ModelAdmin) # 显示的标签字段,字段不能是 ManyToManyField 类型 list_display = ('title...类型的字段 filter_horizontal = ('authors',) # 修改 admin 页面显示标题 admin.site.site_header = "Blog Manager

    3K21

    python测试开发django-19.admin后台自定义显示

    前言 django的admin后台默认显示的内容很少,只显示了表的相关信息,查看字段内容需点开详情才能查看,不是很直观。...在admin.py文件里面是可以自定义相关的展示内容的,也可以添加搜索框,快速的搜索相关内容 优化列表显示 django的表信息列表显示默认值显示了表的相关属性 ?...如果我们想让表里面的字段内容全部显示出来,需在admin.py文件添加list_display 属性,相关代码如下 # admin.py from django.contrib import admin...', 'psw', 'mail') # 设置显示的字段 # User表 admin.site.register(models.User, ControlUser) admin.site.register...class ControlUser(admin.ModelAdmin): '''自定义列表中栏目 添加list_display 属性''' # 显示的字段 list_display

    58320

    基于 Django 的个人网站(1)

    这里只有两个实体——文章和类别,文章实体中必须具有以下属性——id(主键自增)、标题(唯一)、摘要、内容(作者什么的我为了简单外加上节省空间,就不写了),类别,当然文章中还需要一个属性——状态,其中的取值只有两个值,...我们发现这个显示的让人不知道是什么。...既然是类别,我们只需要显示对应的名称就行了,这个问题解决起来很简单,去重写模型类的__str__魔法方法,personal_website\models.py 的代码如下: from django.db...我们可以发现它只显示标题,连状态都不显示,这就有点不太好了,因为毕竟我要看文章是否被发布。...富文本编辑器插件有很多,我在这里使用的是 django-ckeditor,想知道我为什么使用这个插件以及如何使用这个插件,我们下回再说。

    1.4K20

    Django 2.1.7 Admin - 注册模型、自定义显示列表字段

    Admin站点 内容发布的部分由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块。...使用Django的管理模块,需要按照如下步骤操作: 1.管理界面本地化 2.创建管理员 3.注册模型类 4.自定义管理页面 1.管理界面本地化 本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化...打开assetinfo/admin.py文件,编写如下代码: from django.contrib import admin # Register your models here. from .models...4.自定义管理页面 在列表页只显示出了ServerInfo object,对象的其它属性并没有列出来,查看非常不方便。Django提供了自定义管理页面的功能,比如列表页要显示哪些值。...(ServerInfo, ServerInfoAdmin) 刷新ServerInfo的列表页,所有属性都显示出来了 最终assetinfo/admin.py文件代码如下 from django.contrib

    1.1K20

    Django之Model操作数据库详解

    字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制 GenericIPAddressField(Field) - 字符串类型,Django Admin以及ModelForm...Admin以及ModelForm中提供验证 URL SlugField(CharField) - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(...中显示的字段名称 blank Admin中是否允许用户输入为空 editable Admin中是否可以编辑 help_text Admin...中该字段的提示信息 choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作 如:gf = models.IntegerField(choices...的ORM中如何判断查询结果是否为空,判断django中的orm为空 result= Booking.objects.filter() 方法一 .exists() if result.exists():

    7.1K10

    Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段

    使用Django的管理模块,需要按照如下步骤操作: 1.管理界面本地化 2.创建管理员 3.注册模型类 4.自定义管理页面 1.管理界面本地化 本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化...打开assetinfo/admin.py文件,编写如下代码: from django.contrib import admin # Register your models here. from .models...4.自定义管理页面 在列表页只显示出了ServerInfo object,对象的其它属性并没有列出来,查看非常不方便。 Django提供了自定义管理页面的功能,比如列表页要显示哪些值。...(ServerInfo, ServerInfoAdmin) 刷新ServerInfo的列表页,所有属性都显示出来了 最终assetinfo/admin.py文件代码如下 from django.contrib...) class ServerInfoAdmin(admin.ModelAdmin): pass 完整admin.py代码如下: from django.contrib import admin

    2.8K40

    django后台管理-admin

    0922自我总结 django后台管理-admin 一.模型注册 admin.py 注册方式一: #在对于注册的app中的admin文件中导入模型然后注册模型 admin.site.register(导入的模型类...(Blog) class BlogAdmin(admin.ModelAdmin): #listdisplay设置要显示在列表中的字段(id字段是Django模型的默认主键) list_display...一般ManyToManyField多对多字段用过滤器;标题等文本字段用搜索框;日期时间用分层筛选。 过滤器如果是外键需要遵循这样的语法:本表字段__外键表要显示的字段。...如:“user__user_name” 3、颜色显示 from django.db import models from django.contrib import admin from django.utils.html...(name='management') 此处括号内name值必须设置,否则将无法使用admin设置权限,至于设置什么值,经本人测试,没有影响。

    88710
    领券