内联过滤 django admin - 限制选择列表

2024-01-10

鉴于我的内联管理:

class TestInlineAdmin(admin.TabularInline):
    model = Test.questions.through
    extra = 0  

and then

class QuestionAdmin(admin.ModelAdmin):
    inlines = [TestInlineAdmin, ]

Test型号有question字段是多对多。我通常可以直接从测试模型编辑问题列表。 但我希望能够从 QuestionAdmin 内的内联管理中选择测试(因此,相反)。 这有效。但我需要过滤此内联中的测试对象,因此选择列表只会向我显示Test.objects.filter(适用=False).

我尝试使用 get_queryset,但这似乎对选择列表没有影响,它只是过滤内联中的实际引用项目,但新项目的选择列表始终向我显示测试模型的完整未过滤查询集。

覆盖 formfield_for_manytomany 在内联中不起作用 - 它根本不执行。 是否可以通过 formfield_overrides 来实现? 或者,我相信唯一的方法是自定义内联表单?

-Edit-

我的模型定义了 ManyToMany:

class Test(models.Model):
    title = models.CharField(max_length=80)
    description = models.TextField(null=True)
    position = models.ForeignKey('repository.Position', on_delete=models.CASCADE, null=True)
    questions = models.ManyToManyField('questions.Question')
    applicable = models.BooleanField(default=False)

-- 已编辑 -- 威廉提案后的回溯

2021-09-03 07:50:37 | ERROR | /usr/local/lib64/python3.6/site-packages/django/utils/log.py | log_response | - Internal Server Error: /admin/questions/question/45/change/
Traceback (most recent call last):
  File "/usr/local/lib64/python3.6/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/usr/local/lib64/python3.6/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 614, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/utils/decorators.py", line 130, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/sites.py", line 233, in inner
    return view(request, *args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 1656, in change_view
    return self.changeform_view(request, object_id, form_url, extra_context)
  File "/usr/local/lib64/python3.6/site-packages/django/utils/decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/utils/decorators.py", line 130, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 1534, in changeform_view
    return self._changeform_view(request, object_id, form_url, extra_context)
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 1598, in _changeform_view
    formsets, inline_instances = self._create_formsets(request, obj, change=True)
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 1954, in _create_formsets
    for FormSet, inline in self.get_formsets_with_inlines(*get_formsets_args):
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 798, in get_formsets_with_inlines
    yield inline.get_formset(request, obj), inline
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 2053, in get_formset
    fields = flatten_fieldsets(self.get_fieldsets(request, obj))
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 335, in get_fieldsets
    return [(None, {'fields': self.get_fields(request, obj)})]
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 326, in get_fields
    form = self._get_form_for_get_fields(request, obj)
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 2138, in _get_form_for_get_fields
    return self.get_formset(request, obj, fields=None).form
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 2135, in get_formset
    return inlineformset_factory(self.parent_model, self.model, **defaults)
  File "/usr/local/lib64/python3.6/site-packages/django/forms/models.py", line 1082, in inlineformset_factory
    FormSet = modelformset_factory(model, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/forms/models.py", line 879, in modelformset_factory
    error_messages=error_messages, field_classes=field_classes)
  File "/usr/local/lib64/python3.6/site-packages/django/forms/models.py", line 555, in modelform_factory
    return type(form)(class_name, (form,), form_class_attrs)
  File "/usr/local/lib64/python3.6/site-packages/django/forms/models.py", line 258, in __new__
    apply_limit_choices_to=False,
  File "/usr/local/lib64/python3.6/site-packages/django/forms/models.py", line 179, in fields_for_model
    formfield = formfield_callback(f, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 172, in formfield_for_dbfield
    formfield.widget, db_field.remote_field, self.admin_site, **wrapper_kwargs
AttributeError: 'dict' object has no attribute 'widget'

您可以限制QuerySet of the TestInlineAdmin with:

class TestInlineAdmin(admin.TabularInline):
    model = Test.questions.through
    extra = 0
    
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'test':
            kwargs['queryset'] = Test.objects.filter(applicable=False)
        return super().formfield_for_foreignkey(db_field, request, **kwargs)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内联过滤 django admin - 限制选择列表 的相关文章

  • Django:我可以使用 CreateView 创建一个 User 对象,其中 User 只是 Django 的内置用户模型吗?

    我正在尝试创建一个简单的用户登录系统 用户可以在一个页面上注册 然后使用这些凭据在另一页面上登录网站 这是我的注册和登录视图 class SignupView CreateView model User form class SignupF
  • FutureWarning:使用非元组序列进行多维索引

    我收到的警告是 C Users el Anaconda3 envs Py3 lib site packages scipy io matlab miobase py 414 FutureWarning 使用非元组序列进行多维 不推荐使用索引
  • 修改不同Django用户的会话数据

    这可能不可能 但是当某些情况发生时 我想修改某些登录用户的会话数据 标记一些额外的逻辑需要在下次加载页面时运行 有没有办法通过用户 ID 访问用户的会话 tldr Query Session模型 然后通过修改匹配会话SessionStore
  • 字符串中数字的连续相加

    我是一名正在学习 python 的新程序员 并且在如何完成此任务方面遇到了困难 所以本质上我有一个从文件导入的数字字符串需要读取 并且需要将第一个数字的总和添加到第二个数字并将其转换为正确的 ascii 字符 因此 例如 如果我正在读取字符
  • 组内条件计数

    我想在之后进行条件计数groupby 例如 按列的值分组A 然后计算每组中值出现的频率5出现在列中B 如果我整个过程都这样做DataFrame 只是len df df B 5 所以我希望我能做到df groupby A df B 5 siz
  • 无法在我的电脑中启动 django 服务器

    我通过以下方式导出了 django 项目的路径 export DJANGO SETTINGS MODULE Users masi Documents Test djangobook ch3 settings 我运行失败 django adm
  • 使用unicode在hdf5中存储字符串数据集

    我试图从包含特殊字符的文件中存储变量字符串表达式 例如 and 这是我的代码 import h5py as h5 file h5 File deleteme hdf5 a dt h5 special dtype vlen str dset
  • 使用 Pandas 来“applymap”来访问索引/列?

    解决以下 pandas 问题的最有效方法是什么 这是一个简化的示例 其中包含数据框中的一些数据 import pandas as pd import numpy as np df pd DataFrame np random randint
  • Jquery 和 Django 多个复选框

    我是 jquery 的初学者 所以请耐心等待 我有一个 jquery 函数 允许我选择多个复选框并创建一个字符串 如下所示 function getSelectedVals var tmp input name checks each fu
  • django:如何在模板html页面内进行计算?

    您好 我正在使用缩略图插件来获取图像的宽度和高度 现在我想使用从缩略图插件获取的高度来定义 img 标签的填充 例如 img style padding top img height 2 src 但是我在这里遇到错误 django不允许这样
  • 具有 auto_now_add 的 Django DateTimeField 要求默认值

    我的模型中有这个字段created at models DateTimeField auto now add True 当我尝试进行迁移时出现错误 You are trying to add the field created at wit
  • pyVISA:以编程方式将仪器返回到本地模式

    我正在使用 pyVISA 来控制 GPIB 网络中的一些仪器 当我创建资源管理器时 GPIB 网络中的所有仪器都会进入远程模式 因此前面板显示被锁定并且不会更新 当我关闭资源管理器时 仪器仍处于远程模式 import visa rm vis
  • Python setuptools:如何在 setup.py 中添加私有存储库 (gitlab)?

    我上传了 2 个包 它们位于我的 gitlab 存储库中 如果我想使用 pip 将它们安装在我的系统中 这很容易 因为 gitlab 可以帮助您 https docs gitlab com ee user packages pypi rep
  • 如何使用 pyinstaller 包含文件?

    我也使用 tkinter 使用 python 3 7 编写了一个程序 由于我使用的是外部图片 因此当我将所有内容编译为一个 exe 时 我需要包含它们 我试过做 add data bg png files 但我仍然收到此错误 tkinter
  • boto3 资源(例如 DynamoDB.Table)的类型注释

    The boto3库提供了几种返回资源的工厂方法 例如 dynamo boto3 resource dynamodb Table os environ DYNAMODB TABLE 我想注释这些资源 以便我可以获得更好的类型检查和完成 但我
  • 预取相关之后选择相关

    我的模型看起来像 class Book models Model publisher models ForeignKey Publisher This is not important class Baz models Model a mo
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • django-admin.py makemessages 不起作用

    我正在尝试翻译一个字符串 load i18n trans Well Hello there how are you to Hola amigo que tal 我的 settings py 文件有这样的内容 LOCALE PATHS os
  • Django 管理列降序排序

    当使用 Django admin 时格拉佩利 https github com sehmaschine django grappelli我希望单击列标题即可按降序对表格进行排序 我不希望通过在模型元类中定义排序字段来对列进行默认排序 默认行
  • Django模型递归关系

    为什么要创建递归关系 aField models ForeignKey self 这和上面的一样吗 class aClass models Model aField models ForeignKey aClass 当您希望父节点和子节点具

随机推荐

  • 线段树、区间树、二叉索引树和范围树有什么区别?

    线段树 区间树 二叉索引树和范围树之间有什么区别 关键思想 定义 应用领域 更高维度的性能 秩序 空间消耗 请不要仅仅给出定义 所有这些数据结构都用于解决不同的问题 线段树存储间隔 并针对 这些区间中的哪一个包含给定点 查询 区间树也存储间
  • 配置 Rails 以输出 HTML 输出而不是 XHTML

    使用助手 表单 javascript css 等 时 如何配置 Ruby on Rails 输出标准 HTML 代码而不是 XHTML I don t想要在末尾有斜线
  • 如何压缩两个不同大小的列表,重复较短的列表?

    我想压缩两个不同长度的列表 例如 A 1 2 3 4 5 6 7 8 9 B A B C 我期待这个 1 A 2 B 3 C 4 A 5 B 6 C 7 A 8 B 9 C 但内置的zip不会重复与较大尺寸的列表配对 是否存在任何内置方法可
  • 如何动态更改引导模式数据目标点击

    我有一个网站日历 其作用类似于预订请求 我在 Bootstrap 2x 中可以使用此功能 但已将应用程序转换为 3 0 一切似乎都正常 但我试图找出如何动态更改数据目标 如果日期可用 日历中的一天可能如下所示 div class NotRe
  • 我应该使用 YUI 压缩机还是新的 Google Closure 编译器来压缩 JavaScript?

    YUI Compressor 是公认的最佳最小化工具 但 Closure 似乎还可以更好 无论你找到最适合你的那个 我认为这是目前的普遍答案 YUI 已经推出了更长的时间 因此毫无疑问将是目前公认的最佳工具 然而 Closure 对我们来说
  • 如何让 gvim 与 Visual Studio 2010 完美配合?

    在我的上一份工作中 他们使用 Visual Studio 2005 有时也使用 Visual Studio 97 为了方便使用命令行 我使用 vim 来编辑 Mercurial 版本控制配置文件 如 hgrc 和 hgignore 然而 我
  • 更改 HTML POST 端口

    我在 HTML 文档中有一个表单 我想将其内容作为 POST 请求提交到服务器 但是 我想将 POST 请求发送到服务器上除端口 80 之外的端口 这可能吗 只需将其附加到操作中即可
  • 5xx 或 4xx 错误,“不存在‘Access-Control-Allow-Origin’标头”

    我的浏览器在 devtools 控制台中记录以下消息 请求的资源上不存在 Access Control Allow Origin 标头 响应的 HTTP 状态代码为 503 背景 我有两个应用程序 一种是连接到 Mongo 数据库的 Exp
  • Android模拟低数据信号强度

    我在使用某个应用程序时遇到了一些问题 我们的用户抱怨在信号强度较低的情况下 他们在使用该应用程序时遇到了问题 有什么办法可以在模拟器上模拟这个吗 Thanks Teja 我知道在 DDMS 的 模拟器控制 选项卡中 顶部有一个部分 您可以在
  • 使用经过训练的分类器进行 NLTK 分类接口

    我找到了一小块代码here http streamhacker com 2010 05 10 text classification sentiment analysis naive bayes classifier import nltk
  • 扩展 jQuery 核心的用处

    我发现了一种扩展核心 jQuery init 函数的方法 每当您使用 或 jQuery 函数时都会调用该函数 使用普通代理模式不可能做到这一点 但以下代码可以使其工作 var origInit jQuery fn init jQuery f
  • DB2级联删除命令?

    是否有特殊的语法来在 DB2 上执行级联删除 或者是否只能通过使用 ON DELETE CASCADE 选项定义它们来创建 可级联 表 我想要实现的是 当我删除该键时 删除基于相同外键的其他表行 但这是在已经存在且填充数据的数据库上完成的
  • 如何迭代到较小的容器(即步幅!= 1)

    有一个问题在精神上很相似here https stackoverflow com questions 2476425 c stl stdtransform with given stride 不幸的是 这个问题没有引起太多回应 我想我会问一
  • Twitter bootstrap 响应式布局中的最小宽度

    有没有办法告诉 bootstrap 当分辨率小于以下值时不要缩小元素 Portrait tablet to landscape and desktop media min width 768px and max width 979px 我想
  • 如何将有理数格式化为小数?

    给定一个任意大 或小 Rational具有有限十进制表示形式的数字 例如 r Rational 1 2 15 gt 1 32768 如何以字符串形式获取其完整的十进制值 上述数字的预期输出是 0 000030517578125 to f显然
  • 如何使用 java JDBC 获取 MySql 的数据库“架构”名称列表

    如何使用 java JDBC 获取 MySql 的数据库 架构 名称列表 The getSchemas DatabaseMetaData 的方法是显而易见的 但对于 MySQL 你必须使用getCatalogs http download
  • 在没有forceRTL的情况下反应原生阿拉伯语(RTL)

    在 RN 我的双语应用程序 英语 阿拉伯语 中 我使用了I18nManager 意见 和I18n 用于翻译 当我将应用程序语言更改为阿拉伯语时 整个应用程序会使用以下代码从启动屏幕再次重新加载 I18nManager forceRTL tr
  • 为什么 get_weights 返回一个空列表?

    我正在自学数据科学 一些奇怪的东西引起了我的注意 在我正在编写的 DNN 示例教程中 我发现 Keraslayer get weights 函数为我的变量返回空列表 我已成功交叉验证并使用model fit 函数来计算召回分数 但当我尝试使
  • 如何使用 javascript 检测 iPhone/Android 从睡眠中唤醒

    我正在构建一个使用 sockets io 的网站 网络应用程序 目前 如果用户在 iphone 上使用 safari 并且锁定屏幕 变黑 我的套接字连接将关闭 这个不错 我想要这个 然而 当他们解锁屏幕 或从睡眠中醒来 时 我想用 java
  • 内联过滤 django admin - 限制选择列表

    鉴于我的内联管理 class TestInlineAdmin admin TabularInline model Test questions through extra 0 and then class QuestionAdmin adm