Django F 似乎不起作用?

2023-12-27

嗯,出于某种原因,即使在最简单的模型上,我似乎也无法让 F 正常工作。这里是 Django 1.9.x。

最简单的形式是 TestAccount

class TestAccount(models.Model):
    decimal = models.DecimalField(max_digits=5, decimal_places=2)
    integer = models.IntegerField()



In [1]: ta = TestAccount()

In [2]: ta.integer = 1

In [3]: ta.decimal = 1

In [4]: ta.save()

In [5]:

In [5]:

In [5]: ta
Out[5]: <TestAccount: TestAccount object>

In [6]: ta.id
Out[6]: 1L

In [7]: from django.db.models.expressions import F

In [8]: ta = TestAccount.objects.get(id=1)

In [9]: ta.integer = F('integer') + 1

In [10]: ta.save()
---------------------------------------------------------------------------
ValidationError                           Traceback (most recent call last)
<ipython-input-10-6e9eda341b34> in <module>()
----> 1 ta.save()

/usr/lib/python2.7/site-packages/django/db/models/base.pyc in save(self, force_insert, force_update, using, update_fields)
    706
    707         self.save_base(using=using, force_insert=force_insert,
--> 708                        force_update=force_update, update_fields=update_fields)
    709     save.alters_data = True
    710

/usr/lib/python2.7/site-packages/django/db/models/base.pyc in save_base(self, raw, force_insert, force_update, using, update_fields)
    730         if not meta.auto_created:
    731             signals.pre_save.send(sender=origin, instance=self, raw=raw, using=using,
--> 732                                   update_fields=update_fields)
    733         with transaction.atomic(using=using, savepoint=False):
    734             if not raw:

/usr/lib/python2.7/site-packages/django/dispatch/dispatcher.pyc in send(self, sender, **named)
    190
    191         for receiver in self._live_receivers(sender):
--> 192             response = receiver(signal=self, sender=sender, **named)
    193             responses.append((receiver, response))
    194         return responses

/media/sf_helium/build/helium/internal/signals.pyc in validate_model(sender, **kwargs)
     12 def validate_model(sender, **kwargs):
     13     if 'raw' in kwargs and not kwargs['raw']:
---> 14         kwargs['instance'].full_clean()
     15
     16 @receiver(pre_delete)

/usr/lib/python2.7/site-packages/django/db/models/base.pyc in full_clean(self, exclude, validate_unique)
   1142
   1143         if errors:
-> 1144             raise ValidationError(errors)
   1145
   1146     def clean_fields(self, exclude=None):

ValidationError: {'integer': [u"'F(integer) + Value(1)' value must be an integer."]}

但根据这个:https://docs.djangoproject.com/en/1.9/ref/models/instances/#updating-attributes-based-on-existing-fields https://docs.djangoproject.com/en/1.9/ref/models/instances/#updating-attributes-based-on-existing-fields它应该有效...

我不知道为什么 F 没有被排除在验证之外。应该是这样,Django 应该只创建一个查询来更新它。


这在纯 Django 中工作得很好。你的情况的问题是你有一个听众(在helium.internal.signals)到pre_save尝试执行此操作的信号:

def validate_model(sender, **kwargs):
    if 'raw' in kwargs and not kwargs['raw']:
        kwargs['instance'].full_clean()

Model.full_clean模型中的每个字段都需要一堆值,但在这种情况下,其中一个字段不是一个值,而是一个CombinedExpression它尚未被评估,只有当 Django 写入数据库时​​才会被评估。这会导致错误。

IMO,您要么需要执行自己的验证来实现以下逻辑full_clean和手柄Expressions,或者您需要从其中排除包含表达式的字段full_clean.

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

Django F 似乎不起作用? 的相关文章

随机推荐

  • 在字嵌入层中使用来自 fasttext 的 OOV 令牌中的子字信息 (keras/tensorflow)

    我有自己的 Fasttext 模型 并用它训练了带有词嵌入层的 keras 分类模型 但是 我想知道如何利用模型的子词信息来处理 OOV 单词 由于词嵌入层通过索引操作来查找词向量 而 OOV 词没有索引 即使 OOV 标记有索引 我如何为
  • MarkDown 源代码中的正则表达式惰性量词和否定类

    我正在浏览MarkDown http daringfireball net projects markdown John Gruber 用 Perl 编写的代码 有一个名为 Detab将制表符转换为空格 同时保留文本的缩进 有问题的代码行是
  • 无法解析模块“./index”

    过去几天 我的代码中一直收到无法解析模块索引的消息 并找到了临时解决方案 但无法找到永久修复 在过去的几天里 我一直收到此错误 并且当我运行 npm start reset cache 时找到了临时解决方案 但是每当我再次运行 react
  • 在 Google Colaboratory 上安装 faiss

    我尝试按照说明进行操作缪斯计划 https github com facebookresearch MUSE 他们需要 PyTorch 和 Faiss PyTorch 易于安装 但我发现安装有问题Faiss https github com
  • Bulma css 与 select2 jquery 插件

    我尝试实施select2 https select2 github io examples html插件使用Bulma http bulma io documentation elements form css框架 但前端看起来很混乱 我使
  • Gradle 编译依赖项未包含在 Jar 中

    我有一个 jar build plugins jar 其中包含一个 gradle 插件 该插件是在 build gradle 中使用此构建的 apply plugin java dependencies compile gradleApi
  • 服务器端 javascript - 经典 asp

    在客户端 JavaScript 中 this 运算符是窗口对象 经典 asp 服务器端 javascript 中的 this 运算符是什么 在下面的代码中 当在经典 ASP 服务器端运行时 this 引用是什么 test function
  • MySQL 版本与发行版号

    键入 mysql version 在 Linux shell 中执行命令 我得到以下信息 mysql Ver 14 12 Distrib 5 0 77 for redhat linux gnu i686 using readline 5 1
  • ANDROID - 使用 openCV 进行颜色检测 - 如何?

    我的目标是使用 HSV 颜色空间以仅显示黄色对象的方式显示脱粒图像 我使用这个代码 基于 openCV 2 3 1 android 示例给出的代码 protected Bitmap processFrame VideoCapture cap
  • 如何在 Refit 中禁用 urlencoding get-params?

    我使用 Refit 进行 RestAPI 我需要创建相同的查询字符串api item c 14 c 74 在改装界面中我创建了方法 Get item Task
  • Angular 2 Header组件标题根据状态动态变化

    我有一个使用 Angular 2 的设计 其中标题组件 导航栏组件和主体组件加载所有其他组件 如下图所示 Header 导航 其他组件加载的位置 此部分可能嵌套 组件 子组件 所以基本上 在标题组件中 我想显示当前状态 在当前状态的底部 我
  • OSX Lion 上的 SDL 与 g++

    有人知道如何在 OSX Lion 上设置 SDL 简单直接媒体层 以便我可以使用 g 编译我的代码吗 我已阅读该包附带的 自述文件 并将框架文件夹放置在相关目录中 但是 这似乎还不够 谁能帮我 我不想使用Xcode 如果您不使用 XCode
  • 新安装的 WAMP 中有奇怪的字符吗?

    我越来越奇怪的人物在我新安装的本地 WAMP 中 我刚刚从 ftp 在线下载了所有 php 文件 并在本地 mysql 服务器上恢复了备份 仅当文本包含以下内容时才会出现此问题符号或特殊字符 PHP MySQL 排序规则 latin1 sw
  • ThreadJob:无法从 BeginProcessing、... EndProcessing 方法的重写之外调用 WriteObject 和 WriteError?

    我已经安装了 ThreadJob 并且以下代码工作正常 commands r1 Start Sleep Seconds 3 r1 r2 Start Sleep Seconds 3 r2 jobs commands ForEach Objec
  • 为什么我的所有线程都使用 sleep() 进行睡眠?

    我在网上看到了下面一段关于 Linux 线程的代码 但是当我运行它时 所有线程似乎都在睡眠 而不仅仅是主线程 为什么 另外 如果没有 sleep 5 线程创建成功 语句会运行 3 次而不是 2 次 有人可以解释一下这种行为吗 谢谢 编译使用
  • 从解决方案自动生成类图?

    有没有一个免费的工具可以为我们创建类图 我们希望在解决方案上运行它 并让软件为我们生成类和相互关系的完整图表 最好有类似 UML 的图表 我们目前有 VSTS 2008 如果能内置它就太好了 您可以在 Visual Studio 中创建类图
  • Java 读取带有补充 unicode 字符的字符流

    我在使用 Java 读取补充 unicode 字符时遇到问题 我有一个文件可能包含补充集中的字符 任何大于 uFFFF 的字符 当我设置 InputStreamReader 使用 UTF 8 读取文件时 我希望 read 方法为每个补充字符
  • 设计模式:异常/错误处理

    是否有任何资源 网络或书籍 描述异常处理 错误处理设计模式 有很多关于如何编写干净代码的文献 也有很多涉及设计模式的书籍 然而 我从未见过任何设计模式涵盖以下问题 在何处以及如何最好地处理错误 以及如何最好地将低级函数中出现的错误向上传播到
  • 为多个版本的 Visual Studio 开发 Visual Studio 插件

    我的任务是为 Visual Studio 开发一些扩展以供我们内部使用 这些必须支持几个不同版本的 Visual Studio VS2008 2010 和 2012 VS2005 是一个很好的选择 但不是必需的 我希望以尽可能一致的方式开发
  • Django F 似乎不起作用?

    嗯 出于某种原因 即使在最简单的模型上 我似乎也无法让 F 正常工作 这里是 Django 1 9 x 最简单的形式是 TestAccount class TestAccount models Model decimal models De