Soru Django default = timezone.now + delta


Django modelinde anahtar son kullanma tarihi için bir zaman damgası belirlemeye ve bu sorunla karşılaşmaya çalışıyorum:

Mevcut kodum:

key_expires = models.DateTimeField(default=timezone.now() + timezone.timedelta(days=1))

Yukarıdaki kod çalışır, ancak "timezone.now ()" kullanıldığında, Apache'nin yeniden başlatıldığı zaman zaman damgasını alır, bu nedenle bu çalışmaz. Biraz araştırma yaptım ve sorunun bu kısmına dair bir çözüm buldum, bu yüzden "timezone.now ()" değerini "timezone.now" ile değiştirerek, nesne her oluşturulduğunda geçerli zaman damgasını alıyorum. Sorun kısmen çözüldü.

"Timezone.timedelta (days = 1)" kullanarak tarihi değiştirirken sorun yaşıyorum.

key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1))

Aldığım hata:

key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1))

TypeError: +: 'function' ve 'datetime.timedelta' için desteklenmeyen işlenen tip (ler) i

Hedef, 24 saat ilerideki zaman damgasını ayarlamaktır.

Herhangi bir yardım büyük beğeni topluyor.


21
2017-12-15 19:04


Menşei




Cevaplar:


default callable alır, bu yüzden istediğiniz şeyi yapmak için bir işlev yazmanız ve sonra argüman olarak bunu sağlamanız gerekir:

def one_day_hence():
    return timezone.now() + timezone.timedelta(days=1)

class MyModel(models.Model):
    ...
    key_expires = models.DateTimeField(default=one_day_hence)

29
2017-12-15 19:16



Kevin teşekkürler, yardımınız çok takdir edilmektedir! - Nerses