Как вычесть пользовательскую дату в models.DateField из now()?

Я все еще не могу найти работающее решение, поэтому я решил написать свой первый пост. Обратите внимание, я новичок в Django. Создаю портал, который отображает дни с момента верификации пользователя.

Я протестировал свою модель без использования пользовательского DateField (verified_since), только с date_joined, и он работает правильно - показывает количество оставшихся дней (я отсчитываю от 365 дней, високосный год меня пока не волнует) с момента регистрации пользователя в базе данных по сравнению с сегодняшним днем.

class Profile(models.Model): 
    verified_since = models.DateField(default=now)

    @property
    def ver_since(self):
        return 365 - (now() - self.user.date_joined).days 

Теперь, если я использую verified_since вместо date_joined, я получаю ошибку. Я подозреваю, что это связано с другим форматом даты, или, возможно, с форматом строки вместо даты, которая не может быть вычтена из datetime.now()

verified_since - это дата, введенная пользователем на форме вручную.

class Profile(models.Model): 
    verified_since = models.DateField(default=now)

    @property
    def ver_since(self):
        return 365 - (now() - self.user.verified_since).days 

Здесь настройки:

TIME_ZONE = 'CET'
USE_I18N = True
USE_L10N = False
USE_TZ = True


TIME_INPUT_FORMATS = ('%H:%M',)
DATE_INPUT_FORMATS = ['%d/%m/%Y']  

datetime.now() дает вам объект datetime, в то время как ваше 'verified_since' является полем даты. Поэтому просто преобразуйте текущее время в дату.

>>> verified_since
datetime.date(2022, 4, 8)
>>> datetime.now().date()
datetime.date(2022, 4, 12)
>>> 365 - (datetime.now().date() - verified_since).days
361

PS: Я не знаю, для чего нужен ver_since, но, логически рассуждая, это точно не "verified since - in days"

Вернуться на верх