Como filtrar um object baseado em um intervalo DateTimeField em Python (Django) usando o Tastypie

Como é possível filtrar um object com base em um intervalo de campo de data e hora usando o Tastypie .

Eu tenho um modelo Post :

class Post(models.Model): title = models.CharField(max_length=40) postTime = models.DateTimeField(auto_now_add=True) description = models.CharField(max_length=140) 

Os objects post são recuperados através do Tastypie . O intervalo de objects que eu gostaria de recuperar são todos os objects criados a partir de hoje para todos os objects criados há três dias. Então eu tentei filtrar os objects do queryset da seguinte forma

 RecentPosts(ModelResource): class Meta: queryset= Post.objects.filter(postTime__range=(date.today(), date.today() -timedelta(days=3))) resource_name = 'recent-posts' fields = ['id','postTime'] authentication = BasicAuthentication() authorization =DjangoAuthorization() serializer = Serializer(formats=['json']) include_resource_uri = False filtering = { 'postTime': ALL, 'description': ALL, } 

Mesmo depois de fazer isso, não consigo recuperar os objects. Como mais posso fazer isso?

Você já tentou usar

 filtering = { "postTime": ['gte', 'lte'], } 

e, em seguida, na consulta que está chamando o recurso add

 http://your.query/?postTime__lte=&postTime__gte= 

Você também pode escolher

 filtering = { "postTime": ['gte',], } 

ou

 filtering = { "postTime": ['lte',], } 

com uma consulta adequada.

Depois de passar horas mexendo com diferentes soluções, finalmente encontrei uma que funciona. O que eu fiz foi, em vez de fazer a filtragem do queryset eu fiz a filtragem em object_get_list Aqui está a minha solução. Também verifique se você tem as importações adequadas, bem

  from datetime import datetime, timedelta RecentPosts(ModelResource): class Meta: queryset= Post.objects.all() resource_name = 'recent-posts' fields = ['id','postTime'] authentication = BasicAuthentication() authorization =DjangoAuthorization() serializer = Serializer(formats=['json']) include_resource_uri = False filtering = { 'postTime': ALL, 'description': ALL, } get_object_list(self, request): return super(RecentPosts, self).get_object_list.filter(postTime__range=(datetime.now() - timedelta(days=3), datetime.now())) 

Isso retornará todos os objects criados a partir da data atual para todos os objects de 3 dias atrás. Experimente esta solução e deixe-me saber se funciona para você.

Eu tive um caso em que eu precisava que isso fosse tratado na própria consulta. Basicamente, eu queria usar o intervalo na consulta. Eu não consegui encontrar nenhuma resposta. Eu fiz isso da seguinte maneira. Pode ajudar alguém:

 filtering = { "postTime": ['range'] } 

Consulta usando:

 http://your.query/?postTime__range=, 

Retorna todos os registros entre esses dois dias!