В SQL нет способа запрашивать каждую десятую, поэтому ORM обычно не дают вам способа выразить эту потребность. Вы можете сделать эту работу в Python:
samples = list(Weather.objects.filter().exclude(time__lt=commence).exclude(time__gt=cease))
for s10 in samples[::10]:
# do something with every tenth...
Это извлечет все выборки из базы данных в одном запросе, а затем использует только 10% из них. Вы также можете получить только те, которые вам нужны, по одному на запрос:
sample_count = 600 # Somehow determine how many samples are in your time window.
samples = Weather.objects.filter().exclude(time__lt=commence).exclude(time__gt=cease)
for s_num in range(0, sample_count, 10):
s = samples[s_num]
# Now you have one sample in s.
Для уточнения: range
принимает три аргумента: start, stop и step. Например:
>>> range(0, 100, 10)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
Во втором примере выражение диапазона используется для создания значений индекса нужных нам выборок. Затем samples[s_num]
оценивает QuerySet, чтобы получить только это одно значение из базы данных.