Usando varios elementos de las consultas para hacer una consulta compleja
qs = Person.objects.annotate(birth_year_int=Cast(
ExtractYear("birthdate"),
output_field=IntegerField(),),
birth_year_modulus_4=F("bith_year_int") % 4,
birth_year_modulus_100=F("birth_year_int") % 100,
birth_year_modulus_400=F("birth_year_int") % 400,
).annotate(born_in_leap_year=Case(
When(Q(Q(birth_year_modulus_4=0) &
Q(~Q(birth_year_modulus_100=0) | Q(birth_year_modulus_400=0))
),then=True,),
default=False,
output_field=BooleanField(),
).filter(born_in_leap_year=True)
.values_list("birthdate__date", flat=True)
)
for year in years:
assert calendar.isleap(year), (f"{year} ins't a leap year")
Extraído de
DjangoCon 2019 – Building effective Django queries with expressions by Vanessa Barreiros – YouTube
