Reputation: 370
I'm trying something like a story FB apps. I don't know how to how to change BooleanField value after X days?
class Story(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
title = models.CharField(max_length=200, unique=True)
image = models.ImageField(upload_to='story/')
created_on = models.DateTimeField(auto_now_add=True)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.title
@property
def is_active(self):
if self.created_on < #(self.created_on + 2 days)#
return False
return True
Upvotes: 0
Views: 92
Reputation: 1901
class Story(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=200, unique=True)
image = models.ImageField(upload_to='story/')
created_on = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
@property
def is_active(self):
if (self.created_on + timedelta(days=2)) > datetime.now(): # (self.created_on + 2 days)#
return False
return True
Or better yet:
class Story(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=200, unique=True)
image = models.ImageField(upload_to='story/')
created_on = models.DateTimeField(auto_now_add=True)
active_until = models.DateTimeField()
def __str__(self):
return self.title
@property
def is_active(self):
return self.active_until >= datetime.now()
So the lesson is that you don't need to update database after a time. Rather, it's better to structure your models so they are stateless and don't need to be updated. There should only be a "is_active"
boolean field on this model if you want to be able to manually toggle this story on and off.
Upvotes: 1