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 時間で期限切れになります。

したがって、古い nonce の束で DB を混乱させず、アプリケーションが期限切れのナンスを定期的に (頻繁に) 削除する作業を省くために、それらが消費されるまで RAM に保存するのが最善だと考えました (もしあれば)。 )。

だから、私は自分のコードをフォークして、save(commit=False) で作成されたオブジェクトを save() し、オブジェクトを RAM (Memcached) に保存するコードを置き換えるだけだと思いました。後で特定のナンスが消費された場合は、save() を適切に実行します。それ以外の場合、オブジェクトは期限切れになり、Memcache を介してパージされます。

残念ながら、save() got an unexpected keyword argument 'commit'nonce.save(commit=False) 行で Django からエラーが発生しています。なんで?

Django 1.4.5 と Python 2.7.2 を使用しています。

4

1 に答える 1

9

Django のクラスでは、メソッドがそのようModelに定義されていません。saveそれはModelFormsです。Model通常のメソッドのメソッド シグネチャsaveは次のとおりです。

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

別のアプローチを試す必要があります。

これはモデルのsaveメソッドに関する開発者のドキュメントで、これはバージョン 1.4 のものです。

お役に立てれば!

于 2013-06-11T13:07:01.513 に答える