Home > Software design >  How to stop save -data if the data is saved within today for a user
How to stop save -data if the data is saved within today for a user

Time:01-20

enter image description here

class RequestPop(models.Model):

    request_pop = models.PositiveIntegerField(default=0)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE,unique=False,null=True)

    created_at = models.DateTimeField(auto_now_add=True)    
    available_pop = models.PositiveIntegerField(default=0)

    def __str__(self):
        return "{}-{}".format(self.user,self.request_pop)

    def save(self, *args, **kwargs):
        if self.user:
            old_obj = RequestPop.objects.filter(user=self.user).filter(created_at = datetime.today).last()
            if not old_obj:
                super(RequestPop, self).save(*args, **kwargs) 

But my code is not working. How to stop save data if data already saved within today.

CodePudding user response:

I would do something like:

class RequestPop(models.Model):
    request_pop = models.PositiveIntegerField(default=0)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE, unique=False, null=True)

    created_at = models.DateTimeField(auto_now_add=True)
    available_pop = models.PositiveIntegerField(default=0)

    def __str__(self):
        return "{}-{}".format(self.user, self.request_pop)

    def save(self, *args, **kwargs):
        if self.user:
            now = timezone.datetime.now()
            today_midnight = timezone.datetime(day=now.day, month=now.month, year=now.year)
            old_obj = RequestPop.objects.filter(user=self.user).filter(created_at__gte=today_midnight).last()
            if not old_obj:
                super(RequestPop, self).save(*args, **kwargs)

CodePudding user response:

You could simply do like this:

RequestPop.objects.filter(user=self.user).filter(created_at__lte = datetime.today).last()
  •  Tags:  
  • Related