首页 > 解决方案 > 带有日期的 Django __range 函数仅返回第一个日期

问题描述

我想返回Source一个日期范围内的所有对象,我当前的查询是

sources = Source.objects.filter(datetime__range=(date(2013, 5, 15), date(2013, 5, 20))).

但是,返回的sources列表仅包含 2013-5-15 的项目。知道为什么会这样吗?抱歉以下代码转储。

视图.py

from django.shortcuts import render, redirect

import os
import json
import pandas as pd
import numpy as np
import geopandas as gpd
from .models import Source
from datetime import date
from .utils import df_to_geojson

# Create your views here.
def home(request):
    sources = Source.objects.filter(datetime__range=(date(2013, 5, 15), date(2013, 5, 20)))
    print('number of points: {}'.format(len(sources)))
    print(sources)
    sources_df = pd.DataFrame(list(sources.values()))
    source_gdf = gpd.GeoDataFrame(sources_df, geometry=gpd.points_from_xy(sources_df['lon'], sources_df['lat']))

    points = df_to_geojson(sources_df, ['temp_BB', 'area'], 'lat', 'lon')
    print(sources_df.head())

    defaultLon = -3.1883
    defaultLat = 55.9533

    return render(request, 'geoApp/home.html', {
        'points': points,
        'lon': defaultLon,
        'lat': defaultLat,
    })

模型.py

from django.contrib.gis.db import models
from django.contrib.gis.geos import Point
from django.conf import settings
import os
import csv
import pytz
from decimal import Decimal

# Create your models here.
class Source(models.Model):
    id_key = models.CharField(blank=False, max_length=40, unique=True, null=True)
    lon = models.DecimalField(max_digits=14, decimal_places=6, default=999999)
    lat = models.DecimalField(max_digits=14, decimal_places=6, default=999999)
    temp_BB = models.IntegerField()
    area = models.DecimalField(max_digits=14, decimal_places=6, default=999999)
    datetime = models.DateTimeField(null=True)
    radiant_heat_intensity = models.DecimalField(max_digits=14, decimal_places=6, default=999999)
    radiant_heat = models.DecimalField(max_digits=14, decimal_places=6, default=999999)

标签: djangodatedjango-models

解决方案


推荐阅读