django:根据条件排除某些表单元素

2023-11-24

我有一些表单字段,我想根据是否满足特定条件来包含/排除这些字段。我知道如何包含和排除表单元素,但是当我希望它的元素根据函数的结果显示时,我很难做到这一点。

这是我的表格:

class ProfileForm(ModelForm):
    # this_team = get Team instance from team.id passed in
    # how?

    def draft_unlocked(self):
        teams = Team.objects.order_by('total_points')
        count = 0
        for team in teams:
            if team.pk == this_team.pk:
                break
            count += 1

        now = datetime.datetime.now().weekday()
        if now >= count:
            # show driver_one, driver_two, driver_three
        else:
            # do not show driver_one, driver_two, driver_three

class Meta:
    model = Team

我想要实现的是,根据总积分榜,车队在指定日期之前不应该更换车手。例如,积分榜上最后一支球队可以在周一添加/删除一名车手,倒数第二支球队可以在周二添加/删除一名车手,依此类推……

所以第一个问题——如何从传入的 id 中获取表单本身内的 Team 实例。并且,如何根据 Draft_unlocked() 的结果包含/排除。

或者也许有更好的方法来完成这一切?

非常感谢大家。


这实际上相当简单(条件字段设置) - 这是一个简单的示例:

from django.forms import Modelform
from django.forms.widgets import HiddenInput

class SomeForm(ModelForm):

    def __init__(self, *args, **kwargs):
        # call constructor to set up the fields. If you don't do this 
        # first you can't modify fields.
        super(SomeForm, self).__init__(*args, **kwargs)

        try:
            # make somefunc return something True
            # if you can change the driver.
            # might make sense in a model?
            can_change_driver = self.instance.somefunc()                          
        except AttributeError:
            # unbound form, what do you want to do here?
            can_change_driver = True # for example?

        # if the driver can't be changed, use a input=hidden
        # input field.
        if not can_change_driver:
            self.fields["Drivers"].widget = HiddenInput()
        
    class Meta:
        model = SomeModel

因此,要点如下:

  • self.instance如果表单已绑定,则表示绑定对象。我相信它是作为命名参数传递的,因此在kwargs,父构造函数用来创建self.instance.
  • 您可以在调用父构造函数后修改字段属性。
  • 小部件是表单的显示方式。隐藏输入基本上意味着<input type="hidden" .../>.

有一个限制:如果我修改提交的 POST/GET 数据,我可以篡改输入以更改值。如果您不希望发生这种情况,则需要考虑重写表单的验证 (clean()) 方法。请记住,Django 中的所有内容都只是对象,这意味着您实际上可以修改类对象并向其中随机添加数据(但不会持久化)。所以在你的__init__你可以:

self.instance.olddrivers = instance.drivers.all()

然后在所述形式的 clean 方法中:

def clean(self):
    # validate parent. Do this first because this method
    # will transform field values into model field values.
    # i.e. instance will reflect the form changes.
    super(SomeForm, self).clean()

    # can we modify drivers?
    can_change_driver = self.instance.somefunc() 

    # either we can change the driver, or if not, we require 
    # that the two lists are, when sorted, equal (to allow for 
    # potential non equal ordering of identical elements).

    # Wrapped code here for niceness
    if (can_change_driver or 
                   (sorted(self.instance.drivers.all()) == 
                    sorted(self.instance.olddrivers))):  
        return True
    else:
        raise ValidationError() # customise this to your liking.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django:根据条件排除某些表单元素 的相关文章

  • 是否可以在 IPython 控制台中显示 pandas 样式?

    是否可以显示熊猫风格 https pandas pydata org pandas docs stable user guide style html在 iPython 控制台中 Jupyter 笔记本中的以下代码 import panda
  • 在Python中将大文件(25k条目)加载到dict中很慢?

    我有一个大约有 25000 行的文件 它是 s19 格式的文件 每行就像 S214780010 00802000000010000000000A508CC78C 像这样的事情怎么样 我做了一个测试文件 只有一行S21478001000802
  • 如何在plotly(python)中的刻度标签和图形之间添加空格?

    如果我使用绘图创建水平条形图 则每个条形的标签都与图表相对应 我想在标签和图表之间添加一些空间 填充 边距 我怎样才能做到这一点 Example import plotly offline as py import plotly graph
  • NumPy 数组与 SQLite

    我在 Python 中见过的最常见的 SQLite 接口是sqlite3 但是有什么东西可以很好地与 NumPy 数组或 rearray 配合使用吗 我的意思是 它可以识别数据类型 不需要逐行插入 并提取到 NumPy rec 数组中 有点
  • DataFrame.loc 的“索引器太多”

    我读了关于切片器的文档 http pandas pydata org pandas docs stable advanced html using slicers一百万次 但我从来没有理解过它 所以我仍在试图弄清楚如何使用loc切片Data
  • Python Apache Beam 端输入断言错误

    我对 Apache Beam Cloud Dataflow 还很陌生 所以如果我的理解不正确 我深表歉意 我正在尝试通过管道读取大约 30 000 行长的数据文件 我的简单管道首先从 GCS 打开 csv 从数据中提取标题 通过 ParDo
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • 如何在Python中手动对数字列表进行排序?

    规格 Ubuntu 13 04 Python 3 3 1 背景 Python的初学者 遇到了这个 手动排序 问题 我被要求做的事情 让用户输入 3 个数值并将它们存储在 3 个不同的变量中 不使用列表或排序算法 手动将这 3 个数字从小到大
  • Python FTP下载550错误

    我编写了一个 ftp 爬虫来下载特定文件 它会一直工作 直到找到要下载的特定文件 然后抛出此错误 ftplib error perm 550 该文件存在于我的下载文件夹中 但文件大小为 0 kb 我需要转换某些内容才能下载吗 我可以访问 f
  • 当元组列表中相同项目的值是字符串时,对它们的值求和

    如果我有这样的元组列表 my list books 5 books 10 ink 20 paper 15 paper 20 paper 15 我怎样才能把列表变成这样 books 15 ink 20 paper 50 即添加同一项目的费用
  • ImproperlyConfigured at / 不允许空静态前缀 - Django

    我正在使用 Django 上传 显示图像 该网站部署在 Heroku 上 下列的this https coderwall com p bz0sng教程我能够成功上传图像 但是 图像并未显示在模板中 然后我了解到我的 urls py 末尾应该
  • 使用 Python-VLC 的 PyInstaller:无属性“media_player_new”错误

    我使用 Python VLC 创建视频播放器 并使用 PyInstaller 在 Windows 10 计算机上生成可执行文件 最初 它给了我错误 Import Error Failed to load dynlib dll libvlc
  • Pygame:有人可以帮我实现双跳吗?

    我知道已经有其他关于此问题的帖子了 但我的运动系统与我发现的有点不同 所以随后我问这个问题 我的运动系统基于一个名为的命名元组Move up left right down 然后就是这个 def update self move block
  • Django 1.7:如何使用 html/css 文件作为模板发送电子邮件

    从 Django 1 7 开始 可以send email 使用新参数 html message 不幸的是 没有关于如何使用它的全面指南 新手友好 或者至少我找不到它 我需要使发送的电子邮件变得漂亮 因此 我试图弄清楚如何将我的消息包含到 h
  • Django 管理通过 ImageField 链接到图像

    我已经设置了一个活动的 Django 模型 其中包含以下字段 class Activity models Model thumbnail models ImageField upload to thumbs blank True null
  • 为什么我会在 Python 字符串格式中使用除 %r 之外的其他内容?

    我偶尔会使用 Python 字符串格式 这可以像这样完成 print int i Float f String s 54 34 434 some text 但是 这也可以这样做 print int r Float r String r 54
  • 关闭正在运行代码的 IPython Notebook

    怎么运行的 我在 IPython Notebook 中运行了一些代码 一些迭代工作 我不小心关闭了正在运行的笔记本的浏览器 但回到 IPython 仪表板 我发现这个特定的笔记本尚未关闭 所以如果我再次打开笔记本 我会在它正在执行的代码前面
  • JSONDecodeError:额外数据:Python [重复]

    这个问题在这里已经有答案了 我使用以下代码从文件加载 json file file name obj list with open file as f for json obj in f obj list append loads json
  • 将函数按元素应用于两个 DataFrame

    如何应用函数z ij f x ij y ij 来自数据框X and Y相同大小并将结果保存到 DataFrameZ 这取决于你有什么样的功能 很多功能已经被矢量化为数据框 例如 等等 所以对于这些功能 你可以简单地做Z X Y or Z X
  • 将二进制数转换为包含每个二进制数的数组

    我试图将二进制值转换为每个 1 0 的列表 但我得到默认的二进制值而不是列表 我有一个字符串 我将每个字符转换为二进制 它给了我一个列表 其中每个字符都有一个字符串 现在我试图将每个字符串拆分为值为 0 1 的整数 但我什么也得不到 if

随机推荐

  • 从字符串中删除最后一个字符

    如何从字符串中删除最后一个字符 abcdefghij abcdefghi Simple my str abcdefghij my str my str 1 尝试以下代码片段 通过将字符串转换为列表来更好地理解它的工作原理 str1 abcd
  • html 约定 - 自关闭标记 > 或 />,以其他方式

    当从网上获取一些教程时 我看到很多人将标签打开 例如 img 但是 当我使用 Netbeans 编辑它们 HTML JSP 页面 时 它会在这些标签上显示红色背景 直到我向其中添加斜杠为止 br gt br 哪种是编写基于 HTML 的代码
  • 如何使用 ESLint + Prettier + Airbnb 规则 + TypeScript + Vetur 配置 Vue CLI 4?

    创建新项目时使用Vue CLI v4 0 5检查选项打字稿 and 短绒 格式化程序 您将获得用于 linting 和格式化的预配置选项 Pick a linter formatter config Use arrow keys gt ES
  • CSS 直接后代“>”运算符不起作用(并且不是 IE6)?

    我正在尝试做一些非常简单的事情 选择作为标签的直接后代的标签 我使用的CSS如下 table data gt tr background color red 我的 HTML 看起来像这样 table class data tr tr tab
  • 在 SQL 中将数据从宽格式转换为长格式

    我有一些格式的数据 VAR1 VAR2 Score1 Score2 Score3 A B 1 2 3 我需要将其转换为格式 VAR1 VAR2 VarName Value A B Score1 1 A B Score2 2 A B Scor
  • 在 Common Lisp 中展开 / splat 参数

    假设我有一个参数列表 gt setf format args t it s a 1 T it s a 1 然后 我如何将其 展开 或 展开 为一系列参数而不是单个列表参数 以提供给格式函数 即我希望发生以下函数调用 gt format t
  • Amazon S3 POST,事件何时完成?

    我在一个简单的项目中使用 Amazon S3 当用户上传文件时 我首先使用XMLHTTPRequest将详细信息发送到我的数据库 然后触发表单 POST 将文件直接上传到 S3 但我不太清楚的是如何判断上传何时完成 以便我可以正确更新显示
  • Nodatime 库中有工作日的概念吗?

    Nodatime 库中有工作日的概念吗 我想做的是以某种方式声明一个日历周有 5 个工作日 然后能够提出如下问题 从 任何给定日期 10 个工作日开始 结束日期是哪一天 or 从 这个日历日期 到 那个日历日期 这个间隔有多少个工作日 不
  • openssl 提供 Kubernetes Ingress Controller 假证书

    我已经配置了ssl证书 如果我访问https
  • 如何在 Bash 中写入二进制数据

    假设 Bash 脚本中有一个值为 001 的变量 如何将此二进制数据以位形式写入文件 如 001 而不是 1 echo将其写为字符串 但我想以位形式写 您可以使用以下命令以十六进制或八进制写入任意字节 printf x03 gt file
  • 使用推/拉更改 Bootstrap 中 col-*-12 列的顺序

    我有两列相同大小的 col xs 12 当屏幕尺寸与移动设备的尺寸相对应时 我会更改它们的位置 我会把它们按相反的顺序排列 我读过推和拉引导指令有助于实现这一点 但是是否可以使用以下类更改相同大小的两列的位置 div col xs 12 c
  • Imgur API - 即使“X-Ratelimit-Userremaining”不为 0,也会出现“请求过多”错误

    我正在通过 Imgur API 上传图像 https apidocs imgur com 但 即使前一个请求返回 X Ratelimit Userremaining 1216 我也收到 请求过多 错误 429 我的理解是 我应该能够在达到速
  • 日期分隔符问题

    我有以下代码 DateTime Now ToString MM dd yyyy 它总是给我这个输出 04 13 2011 而不是 04 13 2011 我可以知道为什么我会遇到这个奇怪的问题吗 几乎可以肯定 您所在的文化中默认的日期分隔符就
  • 检查 np.array 是否类似于日期时间的一致方法

    我正在进行一些单元测试 我需要确保函数始终返回类似 np datetime64 的对象 但是 它们可以是任何单位 年 日 纳秒等 我试过了 comp function returns datetime array inp assert is
  • Mongoose模型与Sinon的存根保存实例方法

    我正在尝试使用 Mongoose 模型测试用于保存小部件的服务功能 我想在我的模型上删除保存实例方法 但我找不到一个好的解决方案 我看过其他建议 但似乎没有一个是完整的 See this and this 这是我的模型 widget js
  • 尝试编译时出现 QT 未定义引用错误

    我在 QT 项目中添加了一个 IcecastServer 类 将头文件添加到 pro 文件中 并添加了一些代码 每次编译都会出现以下错误 release icecastserver o icecastserver cpp text 0x39
  • css3动画/过渡/变换:如何使图像变大?

    我想让我的图像高度增长到 1500px 希望宽度会自动调整大小 如果没有 我也可以轻松设置它 我正在使用 jquery animate 但它对我来说太不稳定了 我知道我可以使用 webkit transform scale 2 但我希望将其
  • 如何改变函数中变量的作用域?蟒蛇[重复]

    这个问题在这里已经有答案了 这似乎是一个非常愚蠢的问题 但我对 Python 中的范围规则感到困惑 在下面的示例中 我将两个带有值的变量 x y 发送到一个应该更改其值的函数 当我打印结果时 变量没有改变 def func1 x y x 2
  • 如果页面中有错误,则重定向到自定义错误页面

    我是新来的PHPWeb开发 我想知道 PHP 中是否有任何代码可以将我重定向到页面 我们将其命名为 myerrorpage php 页面上是否有错误 In JSP可以使用以下代码 我想知道上面有没有JSPPHP 中的代码类型 是 那么请帮忙
  • django:根据条件排除某些表单元素

    我有一些表单字段 我想根据是否满足特定条件来包含 排除这些字段 我知道如何包含和排除表单元素 但是当我希望它的元素根据函数的结果显示时 我很难做到这一点 这是我的表格 class ProfileForm ModelForm this tea