2013-03-18 83 views
2

如何根據日期時間字段範圍使用Tastypie過濾對象。如何使用Tastypie基於Python(Django)中的DateTimeField範圍過濾對象

我有一個Post模型

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

的對象後,通過Tastypie檢索。我想要檢索的對象的範圍是從今天創建的3天前創建的所有對象的所有對象。所以我試圖過濾查詢集中的對象,如下所示

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, 
      } 

即使這樣做後,我無法檢索對象。我該怎麼辦呢?

+0

請回到[您的其他問題(http://stackoverflow.com/questions/15482775/how-to-filter-an-object-based-on-a-datetime-range-in-python-django/15482817?noredirect = 1個#comment21924252_15482817)。我仍然認爲你的排序的開始和結束時間是錯誤的。 – 2013-03-18 21:57:33

+0

http://stackoverflow.com/questions/11436229/tastypie-filtering-with-multiple-values/11438100#11438100 – catherine 2013-03-19 01:12:22

+0

@MarkRansom我設法找到使用Tastypie工作的解決方案,我已經發布了下面的答案,請檢查出來了! – noahandthewhale 2013-03-19 18:10:18

回答

4

花費大量的時間與不同的解決方案擺弄之後,我終於找到了一個工程。我所做的是,而不是從查詢集進行過濾,我在object_get_list中進行過濾這裏是我的解決方案。此外請確保您有適當的進口

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())) 

這將返回從當前日期創建的所有對象從3天前的所有對象。試試這個解決方案,讓我知道它是否適合你。

+0

這很酷的想法。我只是想知道這是不是「慣用的Django」(不是我對這樣的事情太在意);)。人們也使用該apply_filters(參見http://stackoverflow.com/questions/11436229/tastypie-filtering-with-multiple-values/11438100#11438100) – 2013-03-20 07:06:03

+0

這種方法也正式記錄。看到這裏:http://django-tastypie.readthedocs.org/en/v0.10.0/cookbook.html#per-request-alterations-to-the-queryset和在這裏:http://django-tastypie.readthedocs.org /en/v0.10.0/resources.html#queryset – bjunix 2014-08-24 14:01:17

5

您是否嘗試過使用

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

,然後在其中調用資源的查詢添加

http://your.query/?postTime__lte=<SOME DATE>&postTime__gte=<SOME DATE> 

您也可以選擇

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

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

用適當的查詢。

+0

@PiotKochaniski,這不是我正在尋找的東西,但我確實找到了一個更簡單的解決方案。我將在下面發佈答案,希望你能看看!謝謝你的幫助! – noahandthewhale 2013-03-19 18:07:39

0

我有地方,我需要這個來查詢自己處理的情況。基本上我想在查詢中使用範圍。我找不到任何答案。我以下面的方式完成了它。使用

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

查詢:可以幫助別人

http://your.query/?postTime__range=<SOME DATE>,<SOME DATE> 

返回這兩天之間的所有記錄!

相關問題