如何在 Django 中计算具有相同外键的两个查询集中不同字段之间的日期

How to calculate date between different fields in two querysets with same foreign key in Django

我正在使用 Django。 有没有办法在具有相同外键的查询集中的不同字段之间进行计数??!!

也就是我们要从injection_date中减去register_date。 您想获得 (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 %}

最后我得到一个空列表,但我知道,这是不正确的。我还在模板中使用了以下内容(没有查询集过滤器):

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

有效,但我更希望看到更优雅的解决方案。

这会让你所有的学生用他们的最大值 enroll_date 减去他们的最小值 injection_date 来注释。 min/max 用于删除学生可能出现的重复值

Student.objects.annotate(
    injection_date=Min('feedback__injection_date'),
    enroll_date=Max('feedback__enroll_date')
).annotate(
    enroll_injection=F('enroll_date') - F('injection_date')
)