1

我有一个非常正常的模型:

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 清除。

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

我正在使用 Django 1.4.5 和 Python 2.7.2。

4

1 回答 1

9

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

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

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

这是模型save方法的开发文档,这是 1.4 版的

希望这可以帮助!

于 2013-06-11T13:07:01.513 回答