Sum of F() expression and timedelta created from F() expression

后端 未结 2 663
栀梦
栀梦 2021-01-14 00:47

My Proposal model is defined as follows:

class Proposal(models.Model):
    scheduled_time = models.DateTimeField()
    duration = models.IntegerField() # sto         


        
相关标签:
2条回答
  • 2021-01-14 00:58

    F()-expressions works only with django (as they return instances of specific objects). You can't pass them to timedelta or whatever except some of the django queryset methods.

    So you'd better add new field to you model:

    class Proposal(models.Model):
        scheduled_time = models.DateTimeField()
        duration = IntegerField()
        end = models.DateTimeField(default=self.scheduled_time + timedelta(minutes=self.duration))
    
    0 讨论(0)
  • 2021-01-14 01:16

    F() can't be used that way, as @Daniil already pointed out.

    A possible solution is to add a new field

    end_time = models.DateTimeField()
    

    and override the save method

    def save(self, *args, **kwargs):
        if not self.end_time:
            self.end_time = self.scheduled_time + datetime.timedelta(self.duration)
        super(Proposal, self).save(*args, **kwargs)
    
    0 讨论(0)
提交回复
热议问题