Django - form_valid() 与 save()

2024-07-01

在 django 表单中,为了保存我通常使用的其他数据form_valid()但因为我也可以使用save()表单类的方法。

今天我重写了save()代替form_valid()我的多对多领域出现了问题。

使用时,manytomanyfield 的值不会保存,但是当我使用时form_valid()他们开始储蓄。谁能告诉我原因以及两者之间的区别是什么,哪种方法最方便以及在什么情况下?

这是我对 save() 方法的重写:

class ProductCreateForm(forms.ModelForm):
    sizes = make_ajax_field(ProductCreateModel,'sizes','sizes')
    colours = make_ajax_field(ProductCreateModel,'colours','colours')

    class Meta:
        model = ProductCreateModel

        fields = ('title','category',
                    'regions',)

    def __init__(self,*args,**kwargs):
        self.request = kwargs.pop("request")
        super(ProductCreateForm, self).__init__(*args, **kwargs)

    def save(self):
        product = super(ProductCreateForm, self).save(commit=False)
        user =  self.request.user

        product.location = user.user_location
        product.save()
        return product

当我重写 form_valid() 方法时:

   def get_form_kwargs(self):
       kwargs = super(ProductCreateView,self).get_form_kwargs()
       kwargs.update({'request':self.request})
       return kwargs

   def form_valid(self, form):
       product = form.save(commit=False)
       user =  self.request.user
       form.instance.user = user
       form.instance.location = user.user_location
       form.save()
       return super(ProductCreateView, self).form_valid(form)

sizes,colours and regions是 m2m 字段,正如我在覆盖时提到的save()m2m 的值不会被保存,但是当我覆盖时form_valid他们开始储蓄。


如果您保存表单commit=False,您必须调用表单的save_m2m保存多对多数据的方法。看the docs https://docs.djangoproject.com/en/2.0/topics/forms/modelforms/#the-save-method了解更多信息。

如果您决定使用form_valid方法,我会更改以下内容:

  • 更新返回的实例form.save()并保存它,而不是调用form.save() again.
  • 显式调用form.save_m2m()
  • 返回重定向响应而不是调用super().form_valid()(这将再次保存表格)

把它们放在一起,你会得到:

def form_valid(self, form):
    product = form.save(commit=False)
    product.user =  self.request.user
    product.location.location = user.user_location
    product.save()
    form.save_m2m()
    return redirect('/success-url/')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django - form_valid() 与 save() 的相关文章

  • 二维数组 matplotlib 的颜色图

    所以 我认为这会非常简单 但我一直很难在一个易于理解的示例中找到我正在寻找的内容 基本上我想制作相图 所以假设我有一个二维数组 我怎样才能让 matplotlib 将其转换为我可以附加标题 轴和图例 彩条 的图 我正在寻找一种极其简单的基本
  • Pytorch不支持one-hot向量?

    我对 Pytorch 如何处理 one hot 向量感到非常困惑 在这个tutorial https pytorch org tutorials beginner blitz cifar10 tutorial html 神经网络将生成一个
  • PyCharm 项目文件消失了

    我当时正在做一个 python 项目JetBrains PyCharm 2016 2 https www jetbrains com pycharm 在 Lubuntu 上 突然之间 我的所有项目文件都从 IDE 中消失了 我尝试了以下方法
  • 在django中使用pre_save时取消保存模型

    我有一个模型 class A models Model number models IntegerField 但是当我调用 A save 时 我想确保该数字是素数 或其他条件 否则应该取消保存指令 那么如何取消pre save信号接收器中的
  • scikit learn中partial_fit遇到的错误

    在 scikit learn 中使用partial fit 函数进行训练时 即使训练后的模型行为正确并给出正确的输出 我也会在程序未终止的情况下收到以下错误 这怎么可能 以及这样做的后果是什么 这是值得担心的事情吗 usr lib pyth
  • 以另一种风格制作一个带有形状和偏移参数的 numpy 数组

    我想以 3 元素实体 3d 位置 和单个元素 每个 x y z 坐标 的形式访问我的数组 经过一番研究后 我最终做了以下事情 gt gt gt import numpy as np gt gt gt arr np zeros 5 dtype
  • 关闭Python线程以防止内存泄漏

    如何关闭 Python 线程以确保线程内内存中的所有内容都从内存中清除 目前 我有一个通过以下方式加入的线程列表 for t in threadlist t join 5 这些线程最初是通过循环传递给每个线程的参数列表来创建的myfunc它
  • 如何获取Python日志模块当前正在记录的文件?

    有没有办法做到这一点 如果logging config fileConfig some log 是setter 什么是getter 只是好奇这是否存在 对于我对单个文件日志的基本用法 这有效 logging getLoggerClass r
  • 在heroku上安装pdftotext库

    pdftotext 库是requirements txt 中的要求 在尝试推送到 heroku 时 出现以下错误 remote Running setup py install for pdftotext started remote Ru
  • Python 程序员资源 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使 Selenium WebDriver 不等待整个页面加载

    我正在使用 python 2 7 和 Selenium webdriver for Firefox 我有一个无法解决或在互联网上找到解决方案的问题 我的任务是打开大约 10k 个网页 adsl 路由器 Web 界面 通过 IP 地址 并上传
  • Django:未在 iframe 中设置 CSRF Coo​​kie - 没有 csrf 豁免的解决方法

    我的项目正在几个第三方站点上部署 iframe 这些站点都是已知的并在 django 应用程序中注册 在这些 iframe 中 用户可以触发一些 ajax 形式的事件 直接打开网站 一切正常 如果我打开包含 iframe 的第 3 方站点
  • 任何方法来跟踪Python中的最后5个数据点

    所以我有一个包含多个数字的数组 随着我的脚本运行 越来越多的数字被附加到该数组中 但是 我对所有数字并不感兴趣 而只想跟踪最后 5 个数字 目前 我只是将所有数字存储在数组中 然而 这个数组变得非常大并且充满了不必要的信息 我考虑过创建一个
  • Apache24-x86-VC9 与 mod_wsgi 说,“AH00419:master_main:创建子进程失败。正在退出。”并且不会启动

    我正在尝试在我的 Windows 版本的 Apache24 上安装 WSGI 功能 当我尝试启动该服务时 我在 error log 中收到以下内容 Wed Dec 23 10 24 33 404057 2015 ssl warn pid 2
  • 用python划分两个数据框

    我有两个数据框 df1 and df2 df1 TIMESTAMP eq1 eq2 eq3 2016 05 10 13 20 00 40 30 10 2016 05 10 13 40 00 40 10 20 df2 TIMESTAMP eq
  • 使用 Python API 创建文件后如何立即从 Google Vault 导出下载文件?

    使用 Python API 我创建了一个导出 如何使用相同的授权服务下载导出中的 zip 文件 创建导出时 我可以看到 cloudStorageSink 的 bucketName 和 objectNames 但是我找不到任何有关如何使用创建
  • Pandas:获取重复索引

    给定一个数据帧 我想获取重复的索引 这些索引在列中没有重复的值 并查看哪些值不同 具体来说 我有这个数据框 import pandas as pd wget https www dropbox com s vmimze2g4lt4ud3 a
  • Selenium 不打开指定的 URL 并显示数据:,

    我正在尝试在 chrome 中使用 selenium 打开 URL 我有 chromedriver 可用 以下是我要执行的代码 from selenium import webdriver chrome options webdriver
  • 将函数应用于数据帧的每一行

    下面有什么更优雅的实现方式 我想应用一个函数 my function到数据帧 其中数据帧的每一行都包含函数的参数 然后我想将函数的输出写回数据帧行 results pd DataFrame for row in input panel it
  • 将函数应用于数据帧的每一行

    下面有什么更优雅的实现方式 我想应用一个函数 my function到数据帧 其中数据帧的每一行都包含函数的参数 然后我想将函数的输出写回数据帧行 results pd DataFrame for row in input panel it

随机推荐

  • 使用 AutoMapper 全局应用值解析器

    我试图让 AutoMapper 为我们本地化视图模型上的所有 DateTime 属性 我们在系统中的任何地方都使用 UTC 并将所有内容都以 UTC 格式存储在数据库中 但我们希望自动将其转换为用户的时区以供显示 在查看了所有选项后 我决定
  • 了解虚拟复制构造函数

    我无法理解我用来学习 C 的书中的代码到底发生了什么 这是代码 class Base public Base virtual Base virtual Base Clone return new Base this class Derive
  • android:Textview 在运行时设置样式[重复]

    这个问题在这里已经有答案了 可能的重复 android 在运行时设置textView样式 https stackoverflow com questions 3237752 android set textview style at run
  • Chrome 扩展:如何重定向到自定义 HTML 页面以响应特定的 Web 请求?

    I d like to write an extension that redirects all web traffic to a specific domain let s say wikipedia org to an interme
  • 使用 jQuery 将 HTML 页面动态加载到 div 中

    我试图做到这一点 以便当我单击 HTML 页面中的链接时 它会使用 jQuery 将请求的页面动态加载到 div 中 我怎样才能做到这一点 div div a href page1 html Page 1 a br a href page2
  • 在 Angular 2 中动态更新 css

    假设我有一个 Angular2 组件 home component ts import Component from angular2 core Component selector home templateUrl app compone
  • Java - 加载 .OBJ 文件

    我希望能够从 obj 文件获取信息 例如子组件的名称 那里有装载机可以做到这一点吗 Java3D 有一个 ObjectFile 但是我见过的方法列表让我觉得它不完全是我想要的 我自己解析文件会更好吗 谢谢 将要 几个月前我写了一个 java
  • 如何修复 Django 1.9 中的弃用警告

    我是 Django 框架的新用户 我目前正在使用 django rest framework 构建 REST API 启动服务器时 我收到弃用警告 但我不知道如何修复 已删除InDjango110警告 get all lated objec
  • 如何使模式窗口在页面上居中?

    我正在尝试在浏览器页面中居中放置一个模式窗口 我只想将其居中 以便它能够响应所有屏幕 与位置 绝对假设你的模态是 300x300 modal width 300px height 300px position absolute left 5
  • 是否有针对部分类型同义词实例的 Haskell (GHC) 扩展?

    使用扩展TypeSynonymInstances可以编写这样的实例 instances MyClass String where Using newtype可以声明这样的实例 newtype Kleisli m a b Kleisli a
  • R 中的数据转换

    我有一个包含 2 列的表格 我想根据第二列绘制值当前行之前的 5 行中第一列中的 N 个值的总和 如何在 R 中实现这种转换而无需外部预处理 Example 文件 数据 csv 7 2 4 8 3 6 7 10 9 3 0 4 8 9 3
  • Android Things - 创建相机预览会话失败,并且不显示预览

    我正在尝试部署 Android TensorFlow Lite 示例 特别是检测器活动 我已成功将其部署在平板电脑中 该应用程序运行良好 它能够检测对象 在其周围放置一个边界矩形 并带有标签和置信度 然后 我设置了 Raspberry Pi
  • 为文件夹而不是特定文件类型注册缩略图处理程序

    我需要为给定文件夹下的所有文件编写缩略图处理程序 该文件夹是虚拟文件系统的安装点 使用回调文件系统 https www eldos com cbfs 并且这些文件实际上并不存在于本地计算机上 它们存储在云中 因此如果我让默认的缩略图处理程序
  • angularjs文本区域字符计数器

    您好 我有文本区域的字符数 我的问题是它不计算空格或换行符 我怎样才能做到这一点 div class controls div
  • 如何检测左右按钮是否都被按下?

    我希望在控件上有三个鼠标操作 左 右和两者 我有左键和右键 目前正在使用第三个按钮 但我很好奇如何使用同时按下的左键和右键 对于用户使用没有中键的鼠标的情况 这将在自定义控件的 OnMouseDown 方法中处理 UPDATE查看建议的答案
  • Sass - “map-get”和简单变量有什么区别?

    我是 Sass 的新手 并且一直在阅读有关使用变量的不同方法的信息 我尝试应用的这一原则仅适用于颜色 我发现的一些解决方案如下 map get colors lighestGray F8F8FA lightGray A5ACBA light
  • 如何在React Native中重用React JS组件

    我是新来的React JS 我正在尝试构建一个网络应用程序 该应用程序也应该在移动设备 Android 和 IOS 上运行 因此考虑使用react js for web application并创建了一些组件 那么是否可以使用React j
  • 如何向 Java 提供 scala 伴随对象的类?

    我有一段 Java 代码 用于在类的静态方法中查找注释 processor readStatics MyClass class Takes Class
  • 检测 WKWebView 何时完成加载

    我怎样才能检测到我的WKWebView是否已完成加载 以便我可以从中获取 URL 例如使用委托方法 我实现了委托方法WKWebView但我无法检测到视频何时完成加载 import UIKit import WebKit class View
  • Django - form_valid() 与 save()

    在 django 表单中 为了保存我通常使用的其他数据form valid 但因为我也可以使用save 表单类的方法 今天我重写了save 代替form valid 我的多对多领域出现了问题 使用时 manytomanyfield 的值不会