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

时间:2013-06-11 12:51:49

标签: 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

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

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

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

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

我正在使用Django 1.4.5和Python 2.7.2。

1 个答案:

答案 0 :(得分:8)

Django的Model类没有这样定义save方法。那是ModelForm的。普通Model的{​​{1}}方法的方法签名是这样的:

save

你必须尝试另一种方法。

This is the dev's doc用于模型的def save(self, force_insert=False, force_update=False, using=None): 方法和this one is the version 1.4's

希望这有帮助!