如何在 Django ModelForm 中过滤外键选项?

2024-05-08

假设我的中有以下内容models.py:

class Company(models.Model):
   name = ...

class Rate(models.Model):
   company = models.ForeignKey(Company)
   name = ...

class Client(models.Model):
   name = ...
   company = models.ForeignKey(Company)
   base_rate = models.ForeignKey(Rate)

是否有多个Companies,每个都有一个范围Rates and Clients. Each Client应该有一个基础Rate从它的父级中选择的Company's Rates,不是另一个Company's Rates.

创建用于添加的表单时Client,我想删除Company选择(因为已经通过“添加客户端”按钮选择了Company页)并限制Rate对此的选择Company以及。

我该如何在 Django 1.0 中解决这个问题?

我现在的forms.py文件目前只是样板:

from models import *
from django.forms import ModelForm

class ClientForm(ModelForm):
    class Meta:
        model = Client

And the views.py也是基本的:

from django.shortcuts import render_to_response, get_object_or_404
from models import *
from forms import *

def addclient(request, company_id):
    the_company = get_object_or_404(Company, id=company_id)

    if request.POST:
        form = ClientForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(the_company.get_clients_url())
    else:
        form = ClientForm()

    return render_to_response('addclient.html', {'form': form, 'the_company':the_company})

在 Django 0.96 中,我可以通过在渲染模板之前执行以下操作来解决此问题:

manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]

ForeignKey.limit_choices_to http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.limit_choices_to看起来很有希望,但我不知道如何通过the_company.id我不清楚这是否可以在管理界面之外工作。

谢谢。 (这似乎是一个非常基本的请求,但如果我应该重新设计一些东西,我愿意接受建议。)


foreignKey由django.forms.ModelChoiceField表示,它是一个ChoiceField,其选择是一个模型QuerySet。请参阅参考资料模型选择字段 http://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield.

因此,向该字段提供一个 QuerySetqueryset属性。取决于您的表单是如何构建的。如果您构建显式表单,您将拥有直接命名的字段。

form.rate.queryset = Rate.objects.filter(company_id=the_company.id)

如果您采用默认的 ModelForm 对象,form.fields["rate"].queryset = ...

这是在视图中明确完成的。没有黑客攻击。

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

如何在 Django ModelForm 中过滤外键选项? 的相关文章

随机推荐

  • Google Apps 脚本:从云端硬盘下载文件(同一用户)

    我正在尝试编写一个 Google Apps 脚本来下载特定云端硬盘文件夹中的所有文件 可能是 csv 文件 我找到了 getDownloadUrl 方法 但我不知道该做什么do用它 我目前正在尝试以下代码 其中files是文件夹中的文件列表
  • IEnumerable.GetEnumerator() 和 IEnumerable.GetEnumerator()

    在 net框架中 有一个通用的IEnumerable
  • 在 Android 中使用 Facebook Achievement API

    我知道这可能看起来像一个通用问题 但找到有关该主题的信息似乎非常困难 因此 如果某个地方存在完整的示例 指南 源代码链接 我将不胜感激 我正在开发一款 Android 游戏 希望集成 Facebook 成就 我想要的只是在用户完成某个谜题时
  • Rails 4.0 expire_fragment/缓存过期不起作用

    我一直在尝试使用 Rails 的缓存功能 但我无法使某些缓存片段过期 尽管它们似乎已过期 使用 Rails 教程网站中指出的 Russian Doll Caching 我正在使用此配置 我使release controller rb 控制器
  • #DELETE 在 Access 中查看 SQL Server 表

    今天早上又出现了一个新问题 我的数据库驻留在 SQL Server 上 并使用 Access 作为前端 其中一个已经使用了至少 10 年的数据库今天突然停止工作 我发现这个问题影响了 2 个 可能更多 我没有检查所有 表 当我在访问中打开表
  • 如何使用 R / igraph 设置边缘颜色和顶点间距

    我是 R 新手 试图弄清楚如何为我有数据的系统制作社交网络地图 我已经设法从常见问题解答和教程中弄清楚我想做的大部分事情 但我被困在两件事上 如何使画布更大 图表间隔更大 现在已经太挤了 目前 边缘厚度是根据重量设置的 权重代表不同的状态
  • 如何查看哪个用户启动了 Docker 容器?

    我可以查看正在运行的容器的列表docker ps https docs docker com engine reference commandline ps or 同等地 https stackoverflow com q 45254677
  • J2me -Polish ---与创建和构建项目相关的问题

    我是 j2me polish 的初学者 我已经安装了 j2me polish2 1 4 按照下面链接中显示的步骤 http www j2mepolish org cms leftsection documentation installat
  • 如何抑制 C# 中方法调用的错误?

    我正在寻找一种 优雅 的方法来在调用方法时抑制异常 我认为下面的代码太冗长了 try CallToMethodThatMayFail 3 catch 是否有一些语法糖我可以用来说 我真的不在乎这个方法是否失败 我想调用该方法并继续执行 无论
  • 如何将正文中的数字替换为波斯数字?

    我想将 html 内容中的每个数字转换为波斯数字 而不会对页面元素产生其他影响 例如 div style color c2c2c2 text number 1 span text number 2 span div text number
  • 对“yylex()”的未定义引用

    我正在尝试使用 flex 和 bison 创建一种简单的脚本语言 现在 我只是想让计算器工作 但我无法编译它 当我运行这个 makefile 时 OBJECTS hug tab o hug yy o PROGRAM hug exe CPP
  • Spring data Jpa实体不受管理调用刷新时出现异常

    我有一个数据库代码 jar 我在不同的应用程序中使用它来访问数据库 我在用spring data jpa 我需要调用刷新来检查来自其他应用程序的数据库行的更改 这里我如何实现它 我的StudentRepository界面 public in
  • 本地主机:8080 是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有什么区别本地主机 网络 vs 本地主机 8080 web TCP IP 连接始终与 IP 地址建立 您可以将 IP 地址视为某台计算机的
  • Tensorboard 在浏览器和 vscode 中不显示任何内容

    我运行我的代码并得到一个带有日志的 tfevent 文件 当我跑的时候 tensorboard inspect logdir Path find path grep tfevent 他们毫无问题地返回结果 在我的环境中 tensorboar
  • 如何将默认文本添加到 html 文本区域的开头?

    我正在建立一个个人的小型社交网络 作为设计的一部分 所有状态都应以不应更改的默认文本开始 类似于 嗨 我的名字是 然后用户完成其余的操作 有点像不会消失的 HTML5 占位符 实现这一目标的最佳方法是什么 请参考这个fiddle http
  • Oracle SQL - 将 oracle sql 中的 id 更新为按顺序排列

    我在 Oracle SQL 中有一个表 其 id 按递增顺序排列 但由于编辑原因 id 中存在间隙 例如id 目前类似于 22 23 24 32 33 44 etc 我想通过浏览表中的每一行并更新它们来修复这些差距 这样就不会有差距 最好的
  • 如何填充上次保存的用户和文件的上次保存日期

    我有下面的代码从文件夹中获取文件名 Sub GetFileNames Assessed As T2 Dim sPath As String sFile As String Dim iRow As Long iCol As Long Dim
  • 跳过源无法按预期工作

    我使用 Crypto 5 6 3 并且我需要FileSource Skip 功能 不幸的是这个函数什么也没做 这是一个例子function https www cryptopp com wiki FileSource string file
  • 如何从 docker-compose 链接到 Amazon RDS

    我的 docker compose yml 看起来像这样 django build user django links LINK TO AMAZON RDS command gunicorn sh env file config setti
  • 如何在 Django ModelForm 中过滤外键选项?

    假设我的中有以下内容models py class Company models Model name class Rate models Model company models ForeignKey Company name class