将模型中没有的字段添加到 Django ModelForm

2024-05-21

我有一个看起来像这样的模型:

class MySchedule(models.Model):
  start_datetime=models.DateTimeField()
  name=models.CharField('Name',max_length=75)

随之而来的是它的 ModelForm:

class MyScheduleForm(forms.ModelForm):
  startdate=forms.DateField()
  starthour=forms.ChoiceField(choices=((6,"6am"),(7,"7am"),(8,"8am"),(9,"9am"),(10,"10am"),(11,"11am"),
      (12,"noon"),(13,"1pm"),(14,"2pm"),(15,"3pm"),(16,"4pm"),(17,"5pm"),
      (18,"6pm"
  startminute=forms.ChoiceField(choices=((0,":00"),(15,":15"),(30,":30"),(45,":45")))),(19,"7pm"),(20,"8pm"),(21,"9pm"),(22,"10pm"),(23,"11pm")))

  class Meta:
    model=MySchedule

  def clean(self):
    starttime=time(int(self.cleaned_data.get('starthour')),int(self.cleaned_data.get('startminute')))
    return self.cleaned_data

  try:
    self.instance.start_datetime=datetime.combine(self.cleaned_data.get("startdate"),starttime)

  except TypeError:
    raise forms.ValidationError("There's a problem with your start or end date")

基本上,我试图将模型中的 DateTime 字段分解为 3 个更容易使用的表单字段——日期选择器、小时下拉列表和分钟下拉列表。然后,一旦获得三个输入,我将它们重新组装成 DateTime 并将其保存到模型中。

几个问题:

1)这是完全错误的做法吗?我不想在模型中创建小时、分钟等字段,因为这些基本上只是中间数据,所以我想要一种将 DateTime 字段分解为子字段的方法。

2)我遇到的困难是当开始日期字段为空时——似乎永远不会检查它是否为空,并且当程序需要一个日期并得到 None 时,最终会抛出一个 TypeError 。 Django 在哪里检查空白输入,并引发最终返回到表单的错误?这是我的责任吗?如果是这样,我该怎么做,因为它不会评估 clean_startdate() 因为 startdate 不在模型中。

3)有没有更好的方法来实现继承?也许继承 BetterScheduleForm 中的 MyScheduleForm 并在那里添加字段?我该怎么做? (我已经玩了一个多小时了,似乎无法理解)

Thanks!

[编辑:] 放弃返回 self.cleaned_data ——最初在复制/粘贴中丢失了它


  1. 如果我是你,我会使用自定义 Django 管理日期/时间小部件 https://stackoverflow.com/questions/38601/using-django-time-date-widgets-in-custom-form用于输入日期/时间条目。

  2. 关于表单验证,请确保传递与请求关联的表单,以显示基于表单的错误。 (示例代码如下)

  3. 至于使用继承,对于这个用例来说有点过分了,因为它没有任何目的,最好保持简单。

示例代码:

if request.POST:
    form = MyScheduleForm(request.POST)
    if form.is_valid():
        # Specific stuff with the variables here
        pass
else:
    form = MyScheduleForm()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将模型中没有的字段添加到 Django ModelForm 的相关文章

随机推荐

  • 使用 Delphi 读取 Excel 电子表格

    我需要使用 Delphi 2010 读取和写入 Excel 电子表格 没什么花哨的 只需读取和写入不同工作表上特定单元格和范围的值 需要在没有安装 Excel 的情况下工作并支持 Excel 2007 我看过的一些东西 我尝试过使用ADO
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • node.js 安装向导提前结束

    我无法安装 node js 0 8 9 我是通过安装向导完成的 每次安装结束时我都会收到消息 Node js 安装向导提前结束 会是什么呢 谢谢 这可能会对将来的某人有所帮助 我从安装程序中收到类似的消息 发现我可以转到命令提示符并使用命令
  • 使用 pcl::VoxelGrid 进行 PCL 下采样

    下面的函数不会产生任何结果 也就是说 点云中的点数与降采样前完全相同 我尝试了从 0 01 一直到下面看到的叶子大小的各种数字 但所有这些数字都产生相同的结果 我必须记录来自的转化 如下所示 pcl PointCloud
  • 当 TCP 序列号到达而不是预期时会发生什么情况?

    我正在编写一个程序 使用 libpcap 捕获数据包并重新组装 TCP 流 我的程序只是监视流量 因此我无法控制数据包的接收和发送 我的程序忽略所有非 TCP IP 流量 我根据 ISN 计算下一个预期序列号 然后计算连续的 SEQ 号 我
  • 写入 JSON 会产生 TypeError: dump() 需要至少 2 个参数(给定 1 个)

    我正在尝试加载 json 文件 更新它并写回来 这是我的尝试 但出现错误 类型错误 dump 至少需要 2 个参数 给定 1 个 with open employees json as data file employees json lo
  • 是否有 java.lang.String 的内存高效替代品?

    看完之后这篇旧文章 http www javaworld com javaworld javatips jw javatip130 html page 2测量几种对象类型的内存消耗 我惊讶地发现有多少内存String在Java中的使用 le
  • 如何在 PHP 中将默认日期设置为波斯日期?

    如何在 PHP 中将默认日期设置为波斯日期 说吧 如果我echo这个功能date Y m d 然后它会显示2018 03 05但我想要1396 12 14波斯日期 请检查 http php net manual en intldatefor
  • Google 地图 v3 自定义标记图标无法保持其在地图上的位置

    使用 Google 地图 v3 进行开发 由于某种原因 我的自定义标记图标 更改 了它在放大时的位置 看起来它有某种 填充 属性 不会随着缩放而改变 这意味着它在最大缩放 18 上的位置是正确的 但是如果我更改缩放值 它会 移动 一点到顶部
  • iOS崩溃核心位置CFBasicHashCreateCopy?

    我已经通过 Crashlytics 报告了这个问题 尽管我无法在本地复制它 所以除了下面的堆栈跟踪之外我没有什么可做的 不确定堆栈跟踪中是否引用了 CoreLocation与它有任何关系 但我不确定可能是什么原因 我的项目使用的是ARC 有
  • 使用 Unity 在 iOS 应用程序上发送电子邮件时出错

    我正在开展一个学校项目 我正在尝试记录从我统一制作的游戏中存储的数据 我的问题是我想通过电子邮件将数据发送到应用程序 一切正常 电子邮件与数据一起发送等 但是当我将应用程序构建到 iOS 设备时 它不会发送电子邮件 我在 Unity 中没有
  • Swift - 预期 '{' 启动 setter 定义

    我正在关注高级 swift WWDC 2014 视频 使用类上的下标来委托给类属性 但使用与视频中相同的语法时出现错误 enum Direction case North South East West class Place Thing
  • 通过 C# 与 azure 门户查询资源管理器查询时,Int 值不同

    我发现通过 C API 查询与使用 Azure 门户中的查询资源管理器进行查询之间 Int64 字段的值发生了不同的变化 Document id 15072358 f9eb 4e92 bde1 18e038484042 messageId
  • 仅选择 Varchar 列中的数字[重复]

    这个问题在这里已经有答案了 在 SQL Server 2008 R2 中 我在 varchar 12 列中有一些数据 它看起来像这样 Data 1234 1765 34566 123 SDRMH HJG434 我想从所有包含 的行中删除 并
  • 错误:执行 gem 时... (Gem::FilePermissionError)

    我检查了所有其他类似的答案 没有一个与我的完全一样 这些解决方案也不适合我 gem environment and sudo gem environment给出相同的结果 RubyGems Environment RUBYGEMS VERS
  • OnImageSavedCallback 返回的 OutputFileResults 具有无效的 Uri

    我正在使用 CameraX API 在我的 Android 应用程序中拍照 保存它们 然后从路径中显示它们 与之前的版本alpha 09我能够这样做onImageSaved File file 然而随着alpha 10我必须使用onImag
  • 比较两个 numpy 数组的最快方法

    我有两个数组 gt gt gt import numpy as np gt gt gt a np array 2 1 3 3 3 gt gt gt b np array 1 2 3 3 3 无论顺序如何 比较这两个数组的元素是否相等的最快方
  • 为什么 char name[1] 可以容纳超过 1 个字符? [复制]

    这个问题在这里已经有答案了 当我遇到这种情况时 我正在对一个主题进行一些研究 假设有以下 C 代码 include
  • 如何避免 nginx“上游发送太大的标头”错误?

    我正在运行 nginx Phusion Passenger 和 Rails 我遇到了以下错误 upstream sent too big header while reading response header from upstream
  • 将模型中没有的字段添加到 Django ModelForm

    我有一个看起来像这样的模型 class MySchedule models Model start datetime models DateTimeField name models CharField Name max length 75