保存在 Models.py 之前对 ManyToManyField 进行验证

2023-12-24

我有以下型号:

class Application(models.Model):
 users = models.ManyToManyField(User, through='Permission')
 folder = models.ForeignKey(Folder)

class Folder(models.Model):
 company = models.ManyToManyField(Compnay)

class UserProfile(models.Model):
 user = models.OneToOneField(User, related_name='profile')
 company = models.ManyToManyField(Company)

我想做的是检查应用程序的用户之一是否与应用程序具有同一家公司(通过文件夹)。如果是这种情况,则不应保存应用程序实例。

问题在于,ManyToManyFields 直到“保存后”信号之后才会更新。
唯一的选择似乎是新的 m2m_changed 信号。但我不确定如何回滚已经发生的保存。
另一种选择是重写保存函数(在 models.py 中,因为我在这里谈论的是管理员),但我不确定如何访问 Manytomanyfield 内容。
最后,我在 admin.py 中阅读了有关重写模型管理中的保存函数的内容,但是我仍然不知道如何访问 Manytomanyfield 内容。

我一直在到处寻找这个,但我遇到的似乎没有一个对我有用。
如果有任何不清楚的地方,请告诉我。

感谢您的帮助!
Heleen


因为我没有得到 Botondus 的回复,所以我决定在Django 用户 Google 群组 http://groups.google.com/group/django-users/browse_thread/thread/fa60dc475f12917b#终于从jaymz那里得到了答案。

我认为 Botondus 方法是正确的方法,但它不太有效。在这种情况下它不起作用的原因是因为我正在对我想要进行验证的字段使用 Through 模型。由于一些早期的反馈,我收到了之前发布的问题,我收集到首先保存应用程序实例,然后保存多对多实例(我相信这是正确的,但如果我错了,请纠正我)。所以我想,如果我对 Through 模型中的 ManyToMany 字段执行验证,这不会阻止保存 Application 实例。但事实上它确实阻止了这种情况的发生。

因此,如果您的模型管理中有一个内联的 ManyToMany 字段,并且您想对该字段进行验证,则可以在 through 模型中指定 clean 函数,如下所示:

admin.py
class PermissionInline(admin.TabularInline):
    form = PermissionForm
    model = Permission
    extra = 3

forms.py
class PermissionForm(forms.ModelForm):
    class Meta:
        model = Permission

    def clean(self):
        cleaned_data = self.cleaned_data
        user = cleaned_data['user']
        role = cleaned_data['role']
        if role.id != 1:
            folder = cleaned_data['application'].folder
            if len(filter(lambda x:x in user.profile.company.all(),folder.company.all())) > 0: # this is an intersection
                raise forms.ValidationError("One of the users of this Application works for one of the Repository's organisations!")
        return cleaned_data 

如果验证导致错误,则不会保存任何内容(应用程序实例和许多用户实例),并且您有机会纠正错误。

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

保存在 Models.py 之前对 ManyToManyField 进行验证 的相关文章

  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p
  • Nginx 与 Daphne 给出 502 Bad Gateway

    由于 Django Channels 和 uwsgi 出现问题 我决定用 daphne 替换 uwsgi 关注后this http masnun rocks 2016 11 02 deploying django channels usin
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • 如何在 PHP 中设置深度数组

    假设我有以下功能 function setArray array key value array key value 上面的函数中 key只在第一层 如果我想在第二层或第三层设置key 如何重写函数 e g array foo bar te
  • 如何查看初始化权重(即训练前)?

    我正在使用 Keras 生成一个简单的单层前馈网络 当通过以下方式初始化权重时 我想更好地处理权重的值kernel initializer争论 有没有办法可以在初始化后 即训练完成之前 查看权重值 只需使用get weights 在模型上
  • 包含字符串文字的文档测试

    我有一个单元测试 我想为一个将 XML 作为字符串的函数编写 这是一个文档测试 我希望 XML 与测试一致 由于 XML 是多行的 我在文档测试中尝试了字符串文字 但没有成功 这是简化的测试代码 def test gt gt gt conf
  • Excel VBA 合并/组合具有相同名称的列

    我的项目工作存在类似于下面描述的问题 My dataset is like this What I want is like this LAST COLUMN 我拥有的是许多同名的列 例如 Is paid Job 我想要的是创建一个新列 T
  • 数据库不存在错误

    当我进行数据库备份时 出现数据库不存在的错误 但我可以正常附加数据库 并且其他进程 例如数据插入和更新 工作正常 但是当我进行数据库备份时 出现以下错误 我显示了错误屏幕截图和备份按钮代码 string cnstr Data Source
  • PHP 服务器发送事件连接不会关闭?

    我已经实施了一个服务器发送事件 https developer mozilla org en US docs Web API Server sent events with 事件源 https developer mozilla org e
  • 从函数返回包含单个项目的元组

    刚刚在 Python 中遇到了一点奇怪的地方 我想我应该记录它在这里将其写为一个问题 以防其他人试图使用与我相同的徒劳搜索词来找到答案 看起来元组解包可以做到这一点 因此如果您希望迭代返回值 则无法返回长度为 1 的元组 虽然看起来外表是骗
  • 添加 spring-data-jpa 架构引用后 Spring 配置 xml 无效

    启动 spring 上下文时出现以下异常 java lang Exception java lang IllegalStateException ContainerBase addChild start org apache catalin
  • 错误:(参数类型“String?”无法分配给参数类型“String”,因为“String?”可以为空,而“String”则不能。)在Flutter中

    我是 flutter 的新手 在传递字符串时遇到错误 并到处查找 最后将其添加到 StackOverflow 中 错误是 Error The argument type String can t be assigned to the par
  • Node js函数返回[object Object]而不是字符串值

    我对 java 脚本和 Node js 很陌生 我试图从 MySQL DB 获取一个值 返回值是 object Object 而不是字符串 我在网上没有找到任何答案 这是什么问题 我希望这里有人能提供帮助 行值为 object Object
  • MKAnnotationView 的子类

    我想知道是否有人知道 MKAnnotationView 类的任何子类 在苹果文档中 他们说一个例子是 MKPinAnnotationView 所以我想知道是否还有其他预先创建的子类 例如用于跟踪设备当前位置的子类 如果有人有关于创建我自己的
  • 如何反序列化 C# 对象中的嵌套 xml

    我正在使用 silverlight 来实现 xml 的反序列化 如下所示 字符串 xmlString
  • 在 Activity 开始之前访问 Activity

    我正在使用 Instrumentation TestCase 类来对活动中的某些内容进行单元测试 在启动此活动之前 我需要能够检查 SharedPreferences 的内容并编辑它们 我无法使用 setUp 方法创建 Activity 并
  • 如何在 Lucene 中存储多种不同类型的文档

    我有一个现有的 Lucene 存储 其中包含数百万个文档 每个文档都代表一个实体的元数据 我有几个 Id 字段 Id1 Id2 Id5 每个文档可以有零个或多个该字段的值 一次只能由这些 Id 之一查询该索引 我已经独立地对这些字段建立了索
  • UIButton 渐变不起作用

    我从教程中找到了这段代码并尝试使用它 CAGradientLayer btnGradient CAGradientLayer layer btnGradient frame button bounds btnGradient colors
  • 将 Func 作为属性参数传递以保护 MVC 路由

    我正在尝试保护满足一组条件的一组用户的 MVC 路由 由于 MVC 似乎大量使用属性 而 Steven Sanderson 在他的专业 MVC 书中使用了一个属性来实现安全可扩展性 因此我开始沿着这条路线走下去 但我想根据我所应用的操作来根
  • PHP 的 mcrypt_decrypt() 需要什么?

    我有一个使用 mcrypt decrypt 函数的脚本 但出现以下错误 致命错误 调用未定义的函数 mcrypt decrypt 我需要包含哪些模块 库才能使用此功能 或者还有其他原因导致我收到错误吗 Thanks sudo apt get
  • 工具提示使用标题属性而不使用js?

    我正在寻找另一个制作工具提示的解决方案很长时间title 属性上 hover选择 我希望找到一种使用方法title 属性并更改我的content 动态属性 webkit font smoothing antialiased font fam
  • 纯 bash 中的字符串规范化

    字符 E xcc x81 和 xc3 x89 有不同的代码点 它们看起来相同 但在测试匹配时结果是否定的 不过 Python 可以对它们进行标准化 unicodedata normalize NFC E decode utf 8 unico
  • 保存在 Models.py 之前对 ManyToManyField 进行验证

    我有以下型号 class Application models Model users models ManyToManyField User through Permission folder models ForeignKey Fold