save(commit = False)返回:save()得到一个意外的关键字参数'commit'

mko*_*nen 0 python django django-models

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

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
Run Code Online (Sandbox Code Playgroud)

其中很多都将被创建,我只需要保留其中一部分实际上被"消耗"(使用)的部分.此外,从模型中不明显,但这些将在1小时后到期.

因此,为了不使用一堆旧的nonce混乱我的数据库,并且为应用程序提供定期(经常)删除过期的数据库的工作,我认为最好将它们存储在RAM中直到它们被消耗(如果有的话) ).

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

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

我正在使用Django 1.4.5和Python 2.7.2.

Pau*_* Bu 8

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

def save(self, force_insert=False, force_update=False, using=None):
Run Code Online (Sandbox Code Playgroud)

你将不得不尝试另一种方法.

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

希望这可以帮助!