Как вычислить дату между разными полями в двух наборах запросов с одинаковым внешним ключом в Django

Я использую Django. Есть ли способ подсчета между разными полями в наборе запросов с одним и тем же внешним ключом?!!!

То есть, мы хотим вычесть дату регистрации из даты инъекции. Вы хотите получить (2021-1-03) - (2021-10-31) = 3 дня.

injection_date enroll_date student_id (외래키)
2021-10-31 52
2021-11-03 52

Ниже представлен код, который я написал на данный момент, как мне его исправить?! Пожалуйста, помогите. [models.py]

class Student(models.Model):
    name = models.CharField(max_length=500, blank=True, null=True)
    ...

class Feedback(models.Model):
    injection_date = models.DateField(blank=True, null=True)
    enroll_date = models.DateField(blank=True, null=True)
    student_id = models.ForeignKey(Student, on_delete=models.SET_NULL, null=True, blank=True)

[views.py]

injection_enroll = Feedback.objects\
          .annotate(enroll_injection=F('enrolL_date') - F('injection_date'))

Попробуйте вот это:

from django.db.models import IntegerField, F
from django.db.models.functions import Cast, ExtractDay, TruncDate


injection_enroll = Feedback.objects.annotate(
    enroll_injection=Cast(
        ExtractDay(TruncDate(F('enrolL_date')) - TruncDate(F('injection_date'))),
        IntegerField()
    )
)
from django.db.models import F
my_list = todolist.objects.order_by('injection_date').filter(created__gte=F('enroll_date'))

Шаблон:

{% if my_list %}
{% for list in my_list %}
{{ list.text}}
{% endfor %}
{% else %}
<p>there is no list</p>
{% endif %}

В итоге я получаю пустой список, но я знаю, что это неправильно. Я также использовал следующее внутри шаблона (без фильтра queryset):

{% if list.created|date:'d m y h:i:s' == list.modified|date:'d m y h:i:s' %}

Это сработало, но я бы предпочел увидеть более элегантное решение.

В результате вы получите всех студентов, аннотированных с максимальной датой зачисления минус минимальная дата введения. Минимальное/максимальное значение служит для удаления дубликатов, которые могут встречаться для студента

Student.objects.annotate(
    injection_date=Min('feedback__injection_date'),
    enroll_date=Max('feedback__enroll_date')
).annotate(
    enroll_injection=F('enroll_date') - F('injection_date')
)
Вернуться на верх