【问题标题】:save(commit=False) returns: save() got an unexpected keyword argument 'commit'save(commit=False) 返回:save() 得到了一个意外的关键字参数 'commit'
【发布时间】:2013-06-07 07:56:52
【问题描述】:

我有一个非常普通的模型:

class Nonce(models.Model):

    key = models.CharField(_('key'), max_length=36, primary_key=True, blank=False)
    token = models.ForeignKey('Token')
    date_created = models.DateTimeField(_('date created'), blank=False, default='1970-01-01 00:00:00')
    date_consumed = models.DateTimeField(_('date consumed'), blank=True, null=True)
    created_by = models.IPAddressField(_('IP address'), blank=False, default='0.0.0.0')
    consumed_by = models.ForeignKey('MyUser', blank=True, null=True, on_delete=models.SET_NULL)

    def __unicode__(self):
        return self.key

其中许多将被创建,我只需要保留其中的一小部分实际上是“消耗”(使用)的。此外,从模型中看不出,但这些将在 1 小时后过期。

因此,为了不让一堆旧的随机数弄乱我的数据库,并让应用程序不必定期(经常)删除过期的随机数,我认为最好将它们存储在 RAM 中,直到它们被消耗(如果有的话)。

所以,我已经分叉了我的代码,我想我只需将我的代码替换为我 save() 使用 save(commit=False) 创建的对象,然后将对象存储到 RAM (Memcached) 中。稍后,如果消耗了特定的 nonce,我将正确地 save(),否则,该对象将过期并通过 Memcache 清除。

不幸的是,我在 nonce.save(commit=False) 行收到错误消息:来自 Django 的save() got an unexpected keyword argument 'commit'。为什么?

我正在使用 Django 1.4.5 和 Python 2.7.2。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    Django 的Model 类没有以这种方式定义save 方法。那是ModelForms。普通Modelsave方法的方法签名是这样的:

    def save(self, force_insert=False, force_update=False, using=None):
    

    您将不得不尝试另一种方法。

    This is the dev's doc 用于模型的save 方法和this one is the version 1.4's

    希望这会有所帮助!

    【讨论】:

    • 感谢您的快速答复!
    • 不客气。虽然可能对你有点失望:-/
    • 只有一点点,我认为解决方案是根本不调用 save() ,直到我真的想要它在数据库中。简单!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多