How to compare a datetime to datetimes stored in a Django model?

I have a Django model as follows that includes version_date, which is a DateTimeField:

class Flow(models.Model):
    name = models.CharField(max_length=30, choices=FLOW_NAMES)
    version = models.PositiveSmallIntegerField()
    version_date = models.DateTimeField()
    file = models.FileField(blank=True,null=True)
    last_accessed = models.DateTimeField(auto_now=True)

I would like to compare a timestamp which I have extracted from a XML file, to each version_date value stored in the model. How can I iterate through the model comparing the extracted timestamp to each version_date in the model?

Made an xml file with datetime=2022-05-30 14:15:00. This is what its content looks like:

<first one="1"><id>2022-05-30 14:15:00</id></first>

The file is located in the folder where manage.py is. In the "test" view, the file is read and the root[0].text subelement is used. The value of which is converted to datetime(qqq). Next, the qrt variable is set to values greater than or equal to "qqq" using gte. And a list of filtered "version_dates" is created, which are displayed on the page. Also, all "version_date" data is printed in the loop, you can comment out or delete these lines. In this case, in my database:

2022-06-15 12:00:00+00:00
2022-06-01 06:00:00+00:00
2022-05-05 12:06:27+00:00

urls.py

from django.urls import path
from .views import test

urlpatterns = [
    path('test/', test),
]

views

from .models import Flow
from django.http import HttpResponse
import xml.etree.ElementTree as ET
import datetime

def test(request):
    tree = ET.parse('aaa.xml')
    root = tree.getroot()

    format = '%Y-%m-%d %H:%M:%S'
    qqq = datetime.datetime.strptime(root[0].text, format)

    for e in Flow.objects.all():#you can remove these two lines, they print all version_date
        print(e.version_date)#you can remove these two lines, they print all version_date

    qrt = Flow.objects.filter(version_date__gte=qqq)
    qrt_list = [qrt[i].version_date for i in range(len(qrt))]

    return HttpResponse(f"<p>version_date: {qrt_list}</p>")
Back to Top