django 添加模型后 admin中多对多关系显示为对象

博主在个人博客中遇到上级名称显示问题,百度无果后回忆所学,在模型里添加内容解决了问题,实现分类显示自身。

个人博客 传送门

上级名称其实还是想显示我这个分类的,但是不知道为啥了

今天百度查了一下也没有找到

所以我就回忆之前学的,

在模型里加了一个东西

    def __str__(self):
        return "%s"%(self.clsname)

咦,OK了!

原来这个是要显示他自己的

 

 

 

 

 

### Django Admin 中实现多对多关系的页面跳转方法 在 Django Admin 中,可以通过自定义字段或链接实现多对多关系的页面跳转。以下是详细的实现方法: #### 1. 定义模型 假设我们有两个模型 `Author`(作者) 和 `Book`(书籍),其中一位作者可以写多本书,一本书也可以由多位作者共同创作,即两者是多对多关系。 ```python # models.py from django.db import models class Author(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name class Book(models.Model): title = models.CharField(max_length=200) authors = models.ManyToManyField(Author, related_name='books') def __str__(self): return self.title ``` #### 2. 注册模型Admin 并实现跳转功能 通过自定义 `ModelAdmin` 类中的字段,可以添加一个链接用于跳转到关联的多对多对象列表页面。 ```python # admin.py from django.contrib import admin from django.utils.html import format_html from .models import Author, Book @admin.register(Book) class BookAdmin(admin.ModelAdmin): list_display = ('title', 'author_list') def author_list(self, obj): return ", ".join([author.name for author in obj.authors.all()]) author_list.short_description = '作者列表' @admin.register(Author) class AuthorAdmin(admin.ModelAdmin): list_display = ('name', 'book_count', 'view_books_link') def book_count(self, obj): return obj.books.count() book_count.short_description = '书籍数量' def view_books_link(self, obj): count = obj.books.count() if count > 0: url = f"/admin/myapp/book/?authors__id__exact={obj.id}" return format_html('<a href="{}">查看书籍</a>', url) else: return "无书籍" view_books_link.short_description = '操作' view_books_link.allow_tags = True ``` 上述代码中: - `book_count` 方法用于显示该作者关联的书籍数量。 - `view_books_link` 方法生成一个链接,跳转到筛选后的书籍列表页面,显示与当前作者相关联的所有书籍[^3]。 #### 3. 自定义模板(可选) 如果需要进一步定制跳转页面的观或行为,可以通过覆盖 Django Admin 的默认模板来实现。例如,在 `templates/admin/myapp/author/change_list.html` 中扩展默认模板: ```html {% extends "admin/change_list.html" %} {% block object-tools %} <div class="object-tools"> <a href="/admin/myapp/book/add/" class="addlink">添加新书籍</a> </div> {% endblock %} ``` 这将在作者管理页面中添加一个“添加新书籍”的按钮,直接跳转到书籍的添加页面。 --- ### 补充说明 - 使用 `format_html()` 来安全地渲染 HTML 链接。 - URL `/admin/myapp/book/?authors__id__exact={obj.id}` 是 Django Admin 的内置查询语法,表示根据多对多字段进行过滤。 - 如果使用的是 Django 2.0 及以上版本,`allow_tags` 属性已被弃用,推荐使用 `mark_safe()` 来标记字符串为安全 HTML。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JwCode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值