首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用inline_formsety在模型/表单上的clean()函数中排除已删除的对象

在模型/表单的clean()函数中排除已删除的对象,可以通过使用inline_formset来实现。inline_formset是Django中的一个工具,用于处理嵌套在父模型/表单中的子模型/表单。在使用inline_formset时,我们可以通过重写clean()函数来实现排除已删除的对象。

下面是一个示例,展示如何使用inline_formset在模型/表单的clean()函数中排除已删除的对象:

  1. 导入必要的模块和类:
代码语言:txt
复制
from django.forms import inlineformset_factory
from django.core.exceptions import ValidationError
  1. 定义父模型/表单和子模型/表单:
代码语言:txt
复制
class ParentModel(models.Model):
    # 父模型字段

class ChildModel(models.Model):
    parent = models.ForeignKey(ParentModel, on_delete=models.CASCADE)
    # 子模型字段

class ChildForm(forms.ModelForm):
    class Meta:
        model = ChildModel
        fields = '__all__'
  1. 创建inline_formset:
代码语言:txt
复制
ChildFormSet = inlineformset_factory(ParentModel, ChildModel, form=ChildForm, extra=1)
  1. 在父模型/表单的clean()函数中使用inline_formset:
代码语言:txt
复制
class ParentForm(forms.ModelForm):
    class Meta:
        model = ParentModel
        fields = '__all__'

    def clean(self):
        cleaned_data = super().clean()
        child_formset = ChildFormSet(self.instance, self.data, self.files)

        if not child_formset.is_valid():
            raise ValidationError('子表单数据无效')

        # 排除已删除的子对象
        if self.instance.pk:
            deleted_child_ids = set(self.instance.childmodel_set.values_list('id', flat=True)) - set(child_formset.cleaned_data)
            ChildModel.objects.filter(id__in=deleted_child_ids).delete()

        return cleaned_data

在上述代码中,我们首先通过调用inlineformset_factory函数创建了一个inline_formset,指定了父模型ParentModel和子模型ChildModel,并使用ChildForm作为子表单的形式。

然后,在父模型/表单的clean()函数中,我们通过实例化ChildFormSet并传递父模型实例self.instance、请求数据self.data和文件self.files来创建child_formset对象。我们检查child_formset是否有效,如果无效,则抛出ValidationError。

接下来,我们通过比较子表单中的数据与已保存的子对象的id,确定哪些子对象被删除了。然后,我们使用ChildModel.objects.filter(id__in=deleted_child_ids).delete()来删除这些子对象。

最后,我们返回父模型/表单的cleaned_data。

这样,我们就在模型/表单的clean()函数中成功排除了已删除的对象。

关于推荐的腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体品牌商,我无法直接给出链接,但您可以通过腾讯云官方网站或搜索引擎搜索相关产品以获取详细信息。

相关搜索:如何使用我在模型中定义的函数验证ruby rails中的表单如何使用jquery在DOM中获取对象上的函数?在表单上的自定义验证器中的valueChanges上的“ObjectUnsubscribedError对象已取消订阅”如何使postgres SQL函数使用已删除行中的值?如何知道在laravel中给定模型上的关系是否已更新?如何在Forge Viewer中删除或隐藏模型树面板上的对象?如何使用ng change在表单中形成已更改值的数组如何使用复选框通过嵌套表单修改模型中每个对象的值如何使用javascript动态删除在html中创建的输入表单在使用页面对象模型的Protractor测试中需要断言表单字段如何将现有表单中已删除的内容显示到一个完全独立的url中,该url在django中显示已删除的项目。如何使用Vuejs在Safari中侦听表单上的粘贴事件我不知道如何使用SnackBar Undo在Firestore上恢复已删除的文档如何仅当对象存在时才在Django模型表单中添加额外的字段?当使用react- test -library在表单中提交时,如何测试已调用的函数?如何重新加载已保存的模型(使用图形?)在未来的测试数据上创建相同的结果?Django Forms:如何使用现有模型中的值在表单中创建简单的下拉列表如何使用Typescript泛型来构造可以在类似对象上使用的函数?如何使用gradle在grails脚本上删除目录中的文件如何使用jquery从asp.net视图模型中动态删除行,而不删除集合中其余的后续对象
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django 1.8 官方文档翻译: 2-3-1 模型实例参考

可选exclude 参数用来提供一个可以从验证和清除中排除字段名称列表。ModelForm 使用这个参数来排除表单没有出现字段,使它们不需要验证,因为用户无法修正这些字段错误。...使用update_fields 将强制使用类似force_update 更新操作。 基于存在字段值属性更新 有时候你需要在一个字段执行简单算法操作,例如增加或者减少当前值。...它只在数据库删除这个对象;其Python 实例仍将存在并持有各个字段数据。 更多细节,包括如何批量删除对象,请参见删除对象。 如果你想自定义删除行为,你可以覆盖delete() 方法。...Django 许多地方都使用unicode(obj)(或者相关函数 str(obj))。最明显Django Admin 站点显示一个对象和在模板插入对象时候。...这还意味着你不可以未保存对象使用这些方法。

1.9K10

37.Django1.11.6文档

当一个操作符两个Q 对象使用时,它产生一个新Q 对象。...请注意,我们正在谈论这里表单clean()方法,而较早我们一个字段写了一个clean()方法。 确定哪些地方进行验证时,保持领域和形式差异很重要。 字段是单个数据点,表单是字段集合。...本文中,我们将讨论如何激活、使用和定制Django管理后台界面。 概述 通过使用startproject创建默认项目模版,管理后台启用。...不过请注意,由于方式属性Python 工作方式,属性设置property() 只能使用 short_description 函数,不 能使用@property 装饰器。...在对象删除后调用response_delete。 您可以覆盖它以在对象删除后更改默认行为。 obj_display是具有删除对象名称字符串。

24.3K80
  • Django之model模型对象验证

    模型对象验证 验证一个模型涉及三个步骤: 验证模型字段 —— Model.clean_fields() 验证模型完整性 —— Model.clean() 验证模型唯一性 —— Model.validate_unique...当使用ModelForm时,is_valid() 将为表单所有字段执行这些验证。...可选exclude 参数用来提供一个可以从验证和清除中排除字段名称列表。ModelForm 使用这个参数来排除表单没有出现字段,使它们不需要验证,因为用户无法修正这些字段错误。...在上面的示例,Model.clean() 引发ValidationError 异常通过一个字符串实例化,所以它将被保存在一个特殊错误字典键NON_FIELD_ERRORS。...我们可以更新前面的例子,只引发pub_date 字段异常: class Article(models.Model): ...

    1.4K30

    【Python全栈100天学习笔记】Day44 Web表单介绍及使用

    表单应用 我们继续来完成一章节项目,实现“用户注册”和“用户登录”功能,并限制只有登录用户才能为老师投票。Django框架中提供了对表单封装,而且提供了多种不同使用方式。...由于数据库二维表不应该保存密码原文,所以对密码做了一个简单MD5摘要处理,实际开发如果只做出这样处理还不太够,因为即便使用了摘要,仍然有利用彩虹表反向查询破解用户密码风险,如何做得更好我们会在后续内容中讲到...可以通过表单对象is_valid方法对表单进行验证,如果用户输入没有问题,该方法返回True,否则返回False;由于我们定义RegisterForm继承自ModelForm,因此也可以直接使用表单对象...下面的视图函数用来生成验证码并通过HttpResponse对象输出到用户浏览器。...['password']) 跟之前我们定义注册表单类略有区别,登录表单类直接继承自Form没有跟模型绑定,定义了三个字段分别对应登录表单用户名、密码和验证码。

    84630

    头条一面竟然问我Maven?

    Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档软件项目管理工具。...POM Project Object Model:项目对象模型。将 Java 工程相关信息封装为对象作为便于操作和管理模型。 Maven 工程核心配置。 5.3....这时我们可以引入 A 时候将 B 排除。...test:使用合适单元测试框架来测试编译源代码。这些测试不需要打包和布署。 package:把编译代码打包成可发布格式,比如 jar、war 等。...而使用了聚合之后就可以批量进行 Maven 工程安装、清理工作。 如何配置聚合?聚合工程中使用 modules/module 标签组合,指定模块工程相对路径即可 <!

    87810

    Kaggle word2vec NLP 教程 第一部分:写给入门者词袋

    处理标点符号,数字和停止词:NLTK 和正则表达式 考虑如何清理文本时,我们应该考虑我们试图解决数据问题。对于许多问题,删除标点符号是有意义。...本教程,为简单起见,我们完全删除了标点符号,但这是你可以自己玩东西。 与之相似,本教程我们将删除数字,但还有其他方法可以处理它们,这些方法同样有意义。...详细信息请参阅函数文档。 但是,我们想在本教程编写我们自己数据清理函数,来向你展示如何逐步完成它。...机器学习,你不应该使用测试集来拟合你模型,否则你将面临过拟合风险。 出于这个原因,我们将测试集保持禁止状态,直到我们准备好进行预测。...尝试不同事情,看看你结果如何变化。 你可以以不同方式清理评论,为词袋表示选择不同数量词汇表单词,尝试 Porter Stemming,不同分类器或任何其他东西。

    1.6K20

    Kaggle word2vec NLP 教程 第三部分:词向量更多乐趣

    单词数值表示 现在我们有了训练好模型,对单词有一些语义理解,我们应该如何使用它?...如果你看它背后,第 2 部分训练 Word2Vec 模型由词汇表每个单词特征向量组成,存储一个名为syn0numpy数组: >>> # Load the model that we created...现在,每个单词聚类分布都存储idx,而原始 Word2Vec 模型词汇表仍存储model.index2word。...簇 2 包含…可能与战争有关词? 也许我们算法形容词效果最好。 无论如何,现在我们为每个单词分配了一个簇(或“质心”),我们可以定义一个函数将评论转换为质心袋。...其次,发表文献,分布式单词向量技术已被证明优于词袋模型本文中, IMDB 数据集使用了一种名为段落向量算法,来生成迄今为止最先进一些结果。

    48830

    django入门:Admin管理系统及表单(干货)

    这一部分将介绍 django 自带后台管理系统,以及如何通过表单提交数据 django admin 后台管理系统 在后台管理系统注册创建模型 from django.contrib import admin...from blog.models import Post, Category, Tag # 应用目录下 admin.py 文件,对创建模型进行注册,可以一起用列表注册,也可以分开注册 admin.site.register...admin 主界面 当然,django 自带 admin 管理系统不止那么点功能,接着我们通过定义一些参数,来定制 admin 界面 自定义 admin # 使用后台管理时候,可能需要自己定制...或者 forms.Form 类,如果有相应模型,则使用 ModelForm 更方便 class PostForm(forms.ModelForm): class Meta:...提交表单错误 不存在对应模型(POST 方式) 1. forms.py 创建表单 # 假设有个信息反馈表单 class ContractForm(forms.Form): subject

    2.9K20

    The Clean Architecture in PHP 读书笔记(八)

    当我们写中大型应用时候,我们可能会有些处理表单代码,有些和数据库交互代码,有些辅助函数,但是这些是我们业务逻辑吗?NO! 那什么才是我们业务逻辑呢,或者说是我们应用。...领域模型和领域服务包括了:services,repositories,factories和entities,这些才是我们真正应用。至于其他,都是领域模型和领域服务基础构建UI。...因此我们写下每一行代码同时,需要时刻提醒自己:尽量减少对于框架依赖。 表单 表单是我们项目中最难处理一部分,同样,我们也很难做到和框架解耦。...使用表单过程,我们应该牢记:表达只包含验证和过滤规则,和业务逻辑相关都应该放入领域层。...领域模型 领域模型php中就是最简单php对象,可能是下面这个样子: class Customer { protected $id; protected $name; protected

    69630

    Form和ModelForm组件

    Form介绍  我们之前HTML页面利用form表单向后端提交数据时,都会写一些获取用户输入标签并且用form标签把它们包起来。...局部钩子 我们Fom类定义 clean_字段名() 方法,就能够实现对特定字段进行校验。...Django 模型紧密映射表单。...举个例子,你也许会有个Book 模型,并且你还想创建一个form表单用来添加和编辑书籍信息到这个模型。 在这种情况下,form表单定义字段将是冗余,因为我们已经模型定义了那些字段。...这个方法根据表单绑定数据创建并保存数据库对象。 ModelForm子类可以接受现有的模型实例作为关键字参数instance;如果提供此功能,则save()将更新该实例。

    5K10

    【JS】JavaScript 基础入门

      组成部分 组成部分 作用 ECMA Script 构成了 js 核心语法基础 BOM Browser Object Model 浏览器对象模型,用于操作浏览器对象 DOM Document...Object Model 文档对象模型,用于操作网页元素 (1)ECMAScript(核心):这一部分主要是 JS 基本语法。...(3)DOM:Document Object Model(文档对象模型),此处文档暂且理解为 html,html 加载到浏览器内存,可以使用 JS DOM 技术对内存 html 节点进行修改...undefined, 动态删减属性,通过 delete 删除对象属性, 动态添加,直接给新属性添加值即可, 判断属性值是否在这个对象!...  变量作用域 javascript ,var 定义变量实际是有作用域, 假设在函数体重声明,则在函数体外不可以使用(闭包), function a(){ var x = 1

    26430

    django 关于 ModelForm

    ModelForm:大家表单时候,会发现表单Field和模型Field基本是一模一样,而且表单需要验证数据,也就是我们模型需要保存。...那么这时候我们就可以将模型字段和表单字段进行绑定。比如现在有个Article模型。...ModelForm,因为字段都不是表单定义,而是模型定义,因此一些错误消息无法字段定义。...另外,我们调用save方法时候,如果传入一个commit=False,那么只会生成这个模型对象,而不会把这个对象真正插入到数据库。...比如表单验证字段没有包含模型中所有的字段,这时候就可以先创建对象,再根据填充其他字段,把所有字段值都补充完成后,再保存到数据库

    80260

    如何在Kaggle打比赛,带你进行一次完整流程体验

    在这篇文章,我们利用一个典型例子,来给大家演示如何参加Kaggle竞赛: 开发一个模型来预测一条推特(tweet)内容是否与灾难有关。 使用模型对Kaggle提供测试数据集进行预测。...另一个有用文本清理过程是删除停止字。停止词是非常常用词,通常传达很少意思。英语,这些词包括“the”、“it”和“as”。...数据预处理 一旦清理好数据,就需要进一步预处理,为机器学习算法使用做好准备。 所有的机器学习算法都使用数学计算来映射特征(我们例子是文本或单词)和目标变量模式。...机器学习流程 让我们把所有这些预处理和模型拟合一起放到scikit-learn流程,看看模型如何执行。...对于第一次尝试,模型执行得相当好。 提交成绩 现在让我们看看这个模型竞争测试数据集表现,以及我们排行榜上排名。 首先,我们需要清除测试文件文本,并使用模型进行预测。

    3.1K21

    通过 Laravel Eloquent 模型实现批量赋值和软删除

    在上一篇教程,我们基于 Eloquent 模型实现了对数据表记录增删改查操作,今天我们在此基础介绍两个 Eloquent 模型提供高级功能 —— 批量赋值和软删除。...,但用户表单传递了状态字段将文章状态设置为审核通过,这样文章保存后就直接是发布状态了。...那排除批量赋值之外字段怎么设置呢?...虽然表单设置了 user_id,但是并没有应用批量赋值。 软删除 我们日常开发过程删除数据库记录在所难免,但是我们多数时候并不想从数据库物理删除记录,而只是想从业务角度逻辑删除。...这样我们模型做所有常规查询操作时候就会过滤掉被软删除记录(这些常规查询在上一篇教程已经给出)。

    2.4K10

    带你认识 flask 全文搜索

    添加和删除索引条目的函数将SQLAlchemy模型作为第二个参数。 add_to_index()函数使用我添加到模型__searchable__变量来构建插入到索引文档。...remove_from_index()es.delete()函数,我之前没有展示过。这个函数删除存储在给定id下文档。下面是使用相同id链接两个数据库条目的便利性一个很好例子。...通过传递*字段名称,我告诉Elasticsearch查看所有字段,所以基本我就是搜索了整个索引。这对于使该函数具有通用性很有用,因为不同模型索引可以具有不同字段名称。...在这里,我将表单存储g.search_form,所以当请求前置处理程序结束并且Flask调用处理请求URL视图函数时,g对象将会是相同,并且表单仍然存在。...以下是我如何在基础模板渲染表单代码: app/templates/base.html:导航栏渲染搜索表单。 ...

    3.5K20

    【Java 进阶篇】HTML DOM 事件详解

    HTML DOM(文档对象模型)允许我们使用JavaScript来捕获、处理和响应这些事件,以实现网页交互和动态性。...鼠标移动事件(mousemove) 鼠标移动事件在用户鼠标光标元素移动时触发。您可以使用鼠标移动事件创建各种效果,如鼠标悬停效果和拖拽功能。...要从DOM元素删除事件处理程序,可以使用removeEventListener方法,传递与添加事件处理程序时相同事件类型和处理程序函数。...通过检查event.target,我们可以确定用户点击是哪个元素。 示例:创建一个任务清单 让我们通过一个实际示例来演示如何使用事件处理程序和事件对象来创建一个简单任务清单应用。...通过使用事件类型、事件处理程序和事件对象,开发者可以响应用户操作、改善用户体验,并实现各种功能。了解如何使用事件是成为一名出色前端开发者必备技能。

    23420

    Django学习-第十三讲(下):表单(一)forms.form、forms.modelform

    3. django表单 Modelform 大家表单时候,会发现表单Field和模型Field基本是一模一样,而且表单需要验证数据,也就是我们模型需要保存。...那么这时候我们就可以将模型字段和表单字段进行绑定。 比如现在有个Article模型。...ModelForm,因为字段都不是表单定义,而是模型定义,因此一些错误消息无法字段定义。...另外,我们调用save方法时候,如果传入一个`commit=False,那么只会生成这个模型对象,而不会把这个对象真正插入到数据库。...比如表单验证字段没有包含模型中所有的字段,这时候就可以先创建对象,再根据填充其他字段,把所有字段值都补充完成后,再保存到数据库

    3.2K40
    领券