1

createdDateTimeFieldを持つサブスクリプションモデルがあります。サブスクリプションは、作成された日から1年間続きます。私もexpiredフィールドを持っています。DateTimeField()またはブール値として使用するかどうかはまだ100%わかりません。私は逸脱します。私ができるようにしたいのは、基本的に、サブスクリプションの有効期限が切れる時期を確認/追跡することです。

誰かがこれを行う方法についての洞察を提供できれば、私は非常に素晴らしいでしょう。

class Subscription(models.Model):
    user = models.ForeignKey(User)
    subscribed = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    expired = models.DateTimeField()

    def expiration(self):
         date = created + datetime.timedelta(365).isoformat()
         return self(expired=date) 

エラー:'datetime.timedelta'オブジェクトに属性'isoformat'がありません

4

3 に答える 3

1

https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-predefined-model-methodsを参照してください:

更新しました

期限切れの設定ではself.createdを使用できないためです。

models.py

class Subscription(models.Model):
    user = models.ForeignKey(User)
    subscribed = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    expired = models.DateTimeField()

    def save(self, *args, **kwargs):
        self.expired = datetime.datetime.now()+datetime.timedelta(365) # original answer used this line: self.created + datetime.timedelta(365).isoformat()
        super(Subscription, self).save(*args, **kwargs) # Call the "real" save() method.
于 2012-08-29T21:12:49.337 に答える
1

あなたのdate計算はあなたが作成しているインスタンスを呼び出しisoformatていtimedeltaます、それはあなたのエラーがどこから来ているのかと私は思います。

かっこ(と)が必要だと思いますself

date = (self.created + datetime.timedelta(365)).isoformat()
于 2012-08-29T21:15:13.400 に答える
0

あなたがモデルにとどまるつもりでexpiredあると仮定するとDateTimeField、あなたが本当にしたいことはオーバーライドですclean

def clean(self):
    if self.expired is None:
        self.expired = self.created + timedelta(days=365)
    return super(Subscription, self).clean()
于 2012-08-29T21:24:04.080 に答える