Louis
Louis

Reputation: 370

Django - build a Facebook story - how to change BooleanField value after X days?

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

Answers (1)

Dellkan
Dellkan

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

Related Questions