如何在 Django 管理中显示 ManyToMany 关系的 raw_id 值?

2024-04-22

我有一个应用程序在ForeignKeyField 和ManyToManyField 上使用raw_id。管理员在编辑框右侧显示外键的值。

不幸的是,它不适用于ManyToMany。我检查了代码,我认为这是正常行为。但是我想知道是否有人有一个简单的技巧来改变这种行为?

提前致谢

更新:我尝试对 ManyToManyRawIdWidget 进行子类化,但我不知道如何说 raw_id_fields 应该使用我的自定义小部件。 formfield_overrides 似乎不适用于 raw_id 字段


最后我成功地让它发挥作用。这里是更新后的Django2.0版本

from django.contrib.admin.widgets import ManyToManyRawIdWidget
from django.utils.encoding import smart_str
from django.urls import reverse
from django.utils.html import escape, mark_safe


class VerboseManyToManyRawIdWidget(ManyToManyRawIdWidget):
    """
    A Widget for displaying ManyToMany ids in the "raw_id" interface rather 
    than in a <select multiple> box. Display user-friendly value like the ForeignKeyRawId widget
    """

    def __init__(self, remote_field, attrs=None, *args, **kwargs):
        super().__init__(remote_field, attrs, *args, **kwargs)

    def label_and_url_for_value(self, value):
        values = value
        str_values = []
        field = self.rel.get_related_field()
        key = field.name
        fk_model = self.rel.model
        app_label = fk_model._meta.app_label
        class_name = fk_model._meta.object_name.lower()
        for the_value in values:
            try:
                obj = fk_model._default_manager.using(self.db).get(**{key: the_value})
                url = reverse('admin:{0}_{1}_change'.format(app_label, class_name), args=[obj.id])
                label = escape(smart_str(obj))
                elt = '<a href="{0}" {1}>{2}</a>'.format(
                    url,
                    'onclick="return showAddAnotherPopup(this);" target="_blank"',
                    label
                )
                str_values += [elt]
            except fk_model.DoesNotExist:
                str_values += [u'???']
        return mark_safe(', '.join(str_values)), ''


class MyAdmin(admin.ModelAdmin):
     ...
     def formfield_for_dbfield(self, db_field, **kwargs):
         if db_field.name in ('groups', ):
             kwargs['widget'] = VerboseManyToManyRawIdWidget(db_field.remote_field, self.admin_site)
         else:
             return super().formfield_for_dbfield(db_field, **kwargs)
         kwargs.pop('request')
         return db_field.formfield(**kwargs)

不幸的是,我白白花掉了赏金;-)

更新:此代码片段现在与 Django 2.0 兼容。也可以看看http://djangosnippets.org/snippets/2108/ http://djangosnippets.org/snippets/2108/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Django 管理中显示 ManyToMany 关系的 raw_id 值? 的相关文章

  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • Python - 来自 .进口

    我第一次尝试图书馆 我注意到解决图书馆内导入问题的最简单方法是使用如下结构 from import x from some module import y 我觉得这件事有些 糟糕 也许只是因为我不记得经常看到它 尽管公平地说我还没有深入研究
  • 保留完整姓氏,在 pandas 列中获取名字的首字母(如果有的话,还有中间名)

    我有一个 pandas 数据框 其中有一列表示几位网球运动员的姓氏和姓名 如下所示 Player 0 Roddick Andy 1 Federer Roger 2 Tsonga Jo Wilfred 我想保留完整的姓氏并获取姓名的首字母和中
  • pyspark 数据框中的自定义排序

    是否有推荐的方法在 pyspark 中实现分类数据的自定义排序 我理想地寻找 pandas 分类数据类型提供的功能 因此 给定一个数据集Speed列 可能的选项是 Super Fast Fast Medium Slow 我想实现适合上下文的
  • 工作日重新订购 Pandas 系列

    使用 Pandas 我提取了一个 CSV 文件 然后创建了一系列数据来找出一周中哪几天崩溃最多 crashes by day bc DAY OF WEEK value counts 然后我将其绘制出来 但当然它按照与该系列相同的排名顺序绘制
  • 在没有模型的情况下将自定义页面添加到 django admin

    我正在尝试在没有模型关联的情况下向管理员添加自定义页面 这就是我迄今为止所取得的成就 class MyCustomAdmin AdminSite def get urls self from django conf urls import
  • 如何使用文本相似性删除 pandas 数据框中相似(不重复)的行?

    我有数千个数据 这些数据可能相似也可能不相似 使用 python 的默认函数 drop duplicates 并没有真正的帮助 因为它们只检测相似的数据 例如 如果我的数据包含类似以下内容怎么办 嗨 早上好 嗨 早上好 Python 不会将
  • 一段时间后终止线程的最 Pythonic 方法

    我想在线程中运行一个进程 它正在迭代一个大型数据库表 当线程运行时 我只想让程序等待 如果该线程花费的时间超过 30 秒 我想终止该线程并执行其他操作 通过终止线程 我的意思是我希望它停止活动并优雅地释放资源 我认为最好的方法是通过Thre
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • pytest:同一接口的不同实现的可重用测试

    想象一下我已经实现了一个名为的实用程序 可能是一个类 Bar在一个模块中foo 并为其编写了以下测试 测试 foo py from foo import Bar as Implementation from pytest import ma
  • Tensorflow 与 Keras 的兼容性

    我正在使用 Python 3 6 和 Tensorflow 2 0 并且有一些 Keras 代码 import keras from keras models import Sequential from keras layers impo
  • 使用Python计算目录的大小?

    在我重新发明这个特殊的轮子之前 有没有人有一个很好的例程来使用 Python 计算目录的大小 如果例程能够很好地以 Mb Gb 等格式格式化大小 那就太好了 这会遍历所有子目录 总结文件大小 import os def get size s
  • 如何在 pandas 中使用 read_fwf 跳过空行?

    I use pandas read fwf http pandas pydata org pandas docs stable generated pandas read fwf htmlPython pandas 0 19 2 中的函数读
  • 使用“默认”环境变量启动新的子进程

    我正在编写一个构建脚本来解析依赖的共享库 及其共享库等 这些共享库在正常情况下是不存在的PATH环境变量 为了使构建过程正常工作 让编译器找到这些库 PATH已更改为包含这些库的目录 构建过程是这样的 加载器脚本 更改 PATH gt 基于
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • Anaconda 无法导入 ssl 但 Python 可以

    Anaconda 3 Jupyter笔记本无法导入ssl 但使用Atom终端导入ssl没有问题 我尝试在 Jupyter 笔记本中导入 ssl 但出现以下错误 C ProgramData Anaconda3 lib ssl py in
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • 双击打开 ipython 笔记本

    相关文章 通过双击 osx 打开 ipython 笔记本 https stackoverflow com questions 16158893 open an ipython notebook via double click on osx
  • 使用ssl和socket的python客户端身份验证

    我有一个 python 服务器 需要客户端使用证书进行身份验证 我如何制作一个客户端脚本 使用客户端证书由 python 中的服务器使用 ssl 和套接字模块进行身份验证 有没有仅使用套接字和 ssl 而不扭曲的示例 from OpenSS

随机推荐

  • 使用 Swift array.count 和 arc4random()

    为了让这段代码正常工作 我缺少什么 NodesLeft 是一个 Int let x nodesLeft count let r Int arc4random uniform x 我收到错误 Playground 执行失败 错误 136 40
  • Javascript:在数组末尾重新启动一次循环

    我最近遇到了这个问题 但在任何地方都找不到好的答案 因此有这个问题 我想在到达终点后重新启动循环 但只循环有限的次数 在这个特定的上下文中 我一周中有一系列天 我想使用以下命令显示从今天开始的接下来 7 天的日期名称Date getDay
  • 为什么 C++ 编译器对许多大括号的处理方式不同?

    在下面的 C 20 程序中 我错误地添加了一对额外的弯曲大括号 in B A include
  • 如何在样式组件中访问 Material-ui 的主题

    我将 CRA 与 Material ui 和 Styled Components 类型的样式一起使用 在构建 CSS 时 我想访问 Material ui 的默认主题 package json 的一部分 dependencies react
  • 两点层之间的距离矩阵

    我有两个数组 其中包含不同大小的点坐标 shapely geometry Point Eg Point X Y Point X Y Point X Y Point X Y 我想用距离函数创建这两个数组的 叉积 距离函数来自shapely g
  • RETROFIT 如何解析此响应

    我正在尝试解析这个 json 响应雅虎YQL http chartapi finance yahoo com instrument 1 0 goog chartdata type quote range 1d json使用 Retrofit
  • 如何使用 Chromium 发送帖子和标题数据?

    我正在尝试将一些代码从 TWebBrowser 转换为 Chromium 但无法弄清楚如何使用 HTTP 请求发送帖子和标头数据 下面是我正在尝试实现的 TWebBrowser 功能 var VHeader PostData OleVari
  • 如何为产品类别设置 SQL 表结构?

    我对 SQL 还很陌生 目前正在尝试用 PHP 和 MySql 制作一个简单的产品页面 现在我有一个products有我的产品的表id name price and stock 编辑 样本products tables id name pr
  • 不同命名空间中 k8s 的入口配置

    我需要在 azure k8s 上配置 Ingress Nginx 我的问题是是否可以在一个命名空间等中配置 ingress ingress nginx 和其他命名空间中的一些服务 例如 资源 我的文件看起来像这样 ingress nginx
  • 在 Heroku 上运行 pdf2htmlEX

    我正在尝试奔跑pdf2htmlEX https github com coolwanglu pdf2htmlEX在赫罗库上 起初 我想到在具有与 Heroku 相同堆栈的虚拟机上编译 pdf2htmlEX 然后将二进制文件包含在 git 存
  • 如何从 PHP 字符串中获取 64 位整数哈希值?

    我需要 64 位字符串整数哈希值来实现哈希映射之类的功能 在我看来 没有可以返回 64 位整数的原生 PHP 哈希功能 我认为可以获取 sha1 哈希值的第一部分并将其转换为整数 然而 这不会带来最好的性能 而且转换似乎很棘手 当然 如果不
  • VBA 6.0 和 VBA 7.0 有什么区别?

    我注意到 Office 2010 附带了 Visual Basic for Applications 7 0 但是我似乎找不到太多关于所做更改的文档 有没有人有更改摘要或描述差异的任何资源 VBA6 和 VBA7 之间并没有太多变化 引入
  • 使用 JSoup 时选择具有多个类的元素

    我正在解析网站上的一些表格 特别是我试图按类名提取以下单元格 Elements e d select span class bld lrg red for Element element e System out println eleme
  • 如何捕捉 contentEditable 粘贴事件?

    我有一个很棒的可编辑文本区域wysihat http github com josh wysihat 和内容可编辑 我确实需要一种方法来拦截粘贴事件以阻止它们 或者在允许插入之前处理它们的 DOM 人们可以将整个网页粘贴到可编辑区域 这有点
  • Dependency Walker 未显示所有依赖的 Dll

    我有一个 fortran dll 我想知道它所依赖的程序集再分配目的 http software intel com en us forums showthread php t 73161 我发现的一件事是依赖项步行器没有显示所有依赖项 即
  • 复制上个月的值并插入到新行中

    这是我当前表的示例 1 表名称 TotalSales Name Year Month Sales Alfred 2011 1 100 我想要做的是创建一个像这样的表 添加一个新行 上个月的销售额 2 表名称 TotalSales Name
  • PHPstorm PHPunit 代码共同覆盖

    当我在 PHPstorm 中运行测试套件时 所有代码覆盖率都为 0 我知道这不是真的 当我从命令行运行 PHPunit 时 记录的 HTML 输出文档显示我实际上确实有覆盖率并列出所有详细信息 在 PHPstorm 中 我将 PHP 解释器
  • 从 xml 节点获取行号 - java

    我已经解析了一个 XML 文件并获得了一个我感兴趣的节点 现在如何在源 XML 文件中找到该节点出现的行号 编辑 目前我正在使用 SAXParser 来解析我的 XML 不过 我会对使用任何解析器的解决方案感到满意 除了节点之外 我还有节点
  • Solr距离过滤

    我正在尝试使用 Solr 进行距离范围搜索 我知道在5公里范围内进行搜索过滤很容易 q fq geofilt pt 45 15 93 85 sfield store d 5 我所追求的是如果我正在寻找一系列的说法 如何做同样的事情5至10公
  • 如何在 Django 管理中显示 ManyToMany 关系的 raw_id 值?

    我有一个应用程序在ForeignKeyField 和ManyToManyField 上使用raw id 管理员在编辑框右侧显示外键的值 不幸的是 它不适用于ManyToMany 我检查了代码 我认为这是正常行为 但是我想知道是否有人有一个简