Django ModelChoiceField 使用来自一个模型属性的不同值

2023-12-03

所以我正在开发一个 Django 应用程序,其中有一个模型事件。每个事件都有一些属性,其中之一是“主机名”(我将在整个过程中使用它作为示例)。我需要实现搜索功能,用户可以搜索具有主机名 == some_value 的所有事件,例如主机名==“myhost.foo.bar”。

现在,我希望允许用户在搜索表单的组合框中选择有效选项(即一个或多个事件中实际存在的主机名),因此我在表单中使用 ModelChoiceFields。我的 ModelChoiceView 子类,用于显示正确的标签:

class HostnameModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
    return obj.host.hostname

My form:

class QueryForm(forms.Form):
    hostname = HostnameModelChoiceField(queryset=Event.objects.all(), required=False)
    ...

但是,这会产生重复项,因为许多事件可能具有相同的主机名。我尝试在查询集上使用“distinct()”,但这当然行不通,因为对象是不同的(即使显示的值不是)。

因此,我尝试只选择我需要的值:

class QueryForm(forms.Form):
    hostname = ModelChoiceField(queryset=Event.objects.all().values_list("hostname", "hostname").distinct(), required=False)

但这不会验证!我怀疑是因为这些值不是实际的事件实例,而只是字符串值。

所以我尝试了常规的 ChoiceField:

hostname = forms.ChoiceField(choices=Event.objects.all().values_list("hostname", "hostname").distinct(), required=False)

这是可行的,但是这个列表只填充一次,所以它不是数据库的最新内容。

那么...有什么好的方法可以解决这个问题吗?回顾一下这个问题:如何使用模型字段之一的不同值填充组合框,并使其与数据库保持同步?我认为 ModelChoiceField 将是最好的选择,如果我可以在使用 .values(...) 或 .values_list(...) 时对其进行验证。

真挚地, 哈尔盖尔


第二种方法可行,但您需要将选项设置为init所以每次调用表单时它都会刷新。

e.g

class QueryForm(forms.Form):
    hostname = forms.ChoiceField(choices=[], required=False)

    def __init__(self, *args, **kwargs):
        super(QueryForm, self).__init__(*args, **kwargs)
        self.fields['hostname'].choices = Event.objects.all().values_list("hostname","hostname").distinct()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django ModelChoiceField 使用来自一个模型属性的不同值 的相关文章

随机推荐

  • awk 打印每个类别的所有最小值

    想要打印基于的所有最小值1 美元和 3 美元组合 如果有两条或多条线路可用 对于具有 1 和 3 唯一组合的最小值 则需要打印所有行 例如 1 Abc 的最小值 3 10 出现两次 即 Abc yyy 10 aaa 和 Abc ttt 10
  • CatBoost 精度不平衡类

    我使用 CatBoostClassifier 我的类高度不平衡 我应用了一个scale pos weight参数来解决这个问题 在使用评估数据集 测试 进行训练时 CatBoost 在测试中显示出很高的精度 然而 当我使用预测方法对测试进行
  • 使用jquery停止网页滚动

    我正在网页中使用查询凹凸盒插件 我正在处理 但在使用它时我仍然可以滚动离开凹凸盒 我想知道是否有某种 jquery 方法可以阻止网页滚动 或者只是以与用户滚动相同的距离向相反的方向滚动 由于没有发布代码 很难具体说明 但为了防止滚动 您可以
  • 尝试理解 Java 8 中的方法引用(将类方法分配给功能接口)[重复]

    这个问题在这里已经有答案了 我试图更好地理解方法引用是如何工作的 在这个例子中 我遵循了代码的逻辑 但我不明白这样做的价值 基本上 在 STEP 2 中的方法引用赋值之后 someMethod 被用作 MyInterface 的 displ
  • 删除 *.pyc 并重新运行 .py 脚本后出现奇怪的行为

    我有三个模块 one py def abc print Heeeeeeeeeeeiiiiiioooooooooo two py import one def defg one abc three py import os from time
  • sqlite3 列类型

    我正在开始一个新项目 该项目必须将数据转换为XML to db XMLs有自己的格式 不能用来填充db 我选择使用sqlite 因为它是一个嵌入式平台 我需要一个轻量级的库 我正在努力处理列类型 我写了下面的sql static int c
  • 在 C# 中使用 cmd 将文件从一个目录复制到另一个目录

    我需要将文件从一个目录复制到另一个目录并对该文件执行某些操作 我需要复制它cmd 而不是File Copy 因为我需要将副本作为ProcessStartInfo 您可以使用此代码并更改startInfo Arguments but C应该
  • ChromeDriver 仅支持 Chrome 版本 89

    使用 Azure DevOps 不知何故管道停止工作 并且在运行时无法完成测试ng lint ng e2e ng test watch false 这在本地运行时有效 16 43 25 I launcher Running 1 instan
  • as3 从另一个类调用 Main.as 文档类中的函数

    我确信这是一个受欢迎的问题 但我找不到我需要的确切答案 我只需要访问在 Main as 文档类中创建的一个或多个函数 我尝试了几种方法 但似乎都不起作用 这是我尝试过的一个例子 anotherClass as 这需要访问函数Main as
  • 交互失败discord.py按钮

    client command async def button ctx await ctx message delete await ctx send Support Tickets components Button label Gene
  • 将包含 ASCII 的字符串转换为 Unicode

    我从 HTML 页面获取一个字符串到我的 Java HTTPServlet 中 根据我的要求 我得到了显示汉字的 ASCII 代码 可以告诉我 没有空格 我怎样才能把这个字符串转换成Unicode HTML 代码
  • 从 HTML 按钮运行 Python 脚本

    P 我正在尝试实现一个将运行 Python 脚本的按钮forward py 让我的机器人前进 使用 Lighttpd Web 服务器 PHP 7 0 Python 脚本在终端窗口中执行时工作正常 但是当我尝试通过单击按钮运行它时 它不起作用
  • 推送到 GitHub 时出现 403 错误

    我正在尝试将一个新的本地分支 名为 haystack 推送到我的 github 存储库 git push u origin haystack 但我收到错误 错误 访问时请求的 URL 返回错误 403https github com Gra
  • 使用 jQuery 验证单选按钮

    在我的表单上有一组单选按钮 这是标记 div class optionHolder p class optionName Format p div class option checked div div
  • AsyncTask 从不执行 onPostExecute

    我正在尝试执行以下 AsyncTask private class TimeUpdateTask extends AsyncTask
  • Sklearn LinearSVC库中惩罚参数和损失参数的区别

    我对 SVM 理论不太熟悉 我在 python 中使用这个 LinearSVC 类 http scikit learn org stable modules generated sklearn svm LinearSVC html skle
  • 嵌入式系统上的 C++ 动态代码注入

    我正在寻找以下问题的解决方案 开发了在嵌入式设备上运行的 C 软件模块 无法使用基于文件的函数 dlopen 来加载共享库 当模块运行时 它应可通过动态程序代码进行扩展 动态代码在PC系统上编写 接口功能的实现 和交叉编译 gcc 然后通过
  • 如何用两种颜色填充 JavaFX 球体

    如何用像 2d 圆一样的线性渐变填充 JavaFX 3D 球体 我使用 JavaFX 场景生成器 正如 mohsenmadi 所指出的 漫反射颜色不允许您使用除一种单一颜色之外的其他颜色 但是 通过使用图像作为漫反射贴图 您可以在球体上拥有
  • 为什么我没有收到“分段错误”? [复制]

    这个问题在这里已经有答案了 可能的重复 当我写入超出数组末尾时 为什么不会出现分段错误 这段代码编译并运行没有任何错误 但如何呢 include
  • Django ModelChoiceField 使用来自一个模型属性的不同值

    所以我正在开发一个 Django 应用程序 其中有一个模型事件 每个事件都有一些属性 其中之一是 主机名 我将在整个过程中使用它作为示例 我需要实现搜索功能 用户可以搜索具有主机名 some value 的所有事件 例如主机名 myhost