Как получить предыдущую дату? Вообще-то я работаю над проектом по донорству крови

#Models.py
from django.db import models

class User(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    mobile_number = models.IntegerField()
    cnic = models.CharField(max_length = 13)
    blood_group = models.CharField(max_length= 10)
    last_donation = models.DateTimeField(auto_now_add=True)

#Views.py
from django.shortcuts import render
from .models import *
from .forms import UserForm
from datetime import  datetime,timedelta
from django.contrib import messages

def home(request):
    return render(request, 'home.html')

def donor(request):
    if request.method == "POST":
        userform = UserForm(request.POST)
        if userform.is_valid():
            userform.save()
    else:
        userform = UserForm()
    return render(request, 'donor.html',{'userform':userform})    
#forms.py
from django.core.exceptions import ValidationError
from django.forms import ModelForm
from .models import User
from datetime import  datetime,timedelta
from django.shortcuts import render

class UserForm(ModelForm):
    class Meta:
        model = User
        fields = "__all__"
    
    def clean_cnic(self):
        cnic = self.cleaned_data['cnic']
        print("This is a cnic",cnic)
        if User.objects.filter(cnic = cnic).exists():
            # i want to get previous date 
            

На самом деле я работаю над проектом по донорству крови. В первый раз, когда пользователь приходит, он или она вводит данные и дата автоматически добавляется, потому что это auto_now_add. Снова тот же пользователь приходит и вводит данные, я сопоставляю CNIC, если пользователь существует, если пользователь существует, то я должен получить предыдущую дату и после получения предыдущей даты я должен вычесть предыдущую дату из текущей даты, чтобы проверить, завершено ли 90 дней, если нет, то я должен показать сообщение "U have to wait 90 days to complete" Как я получаю предыдущую дату?

Вы, вероятно, хотите что-то вроде этого:- (Я думаю, что если cnic является уникальным полем, вы должны установить уникальное или первичное ключевое ограничение на него)

existing_user = User.objects.get(cnic=cnic)

if existing_user:
  previous_date = existing_user.last_donation 
  current_date = datetime.datetime.now()
  days_diff = (current_date - previous_date).days

Вы можете получить экземпляр внутри вашего чистого метода с помощью self.instance.

def clean_cnic(self):
    cnic = self.cleaned_data['cnic']
    print("This is a cnic",cnic)
    if User.objects.filter(cnic = cnic).exists():
        # i want to get previous date 
        if self.instance:
           prev_date = self.last_donation.date()
           # your logic now
Вернуться на верх