2015-11-02 77 views
0

在Django 1.8 python3.4如何使用模型的定義進行過濾?

view.py

Bid_data = Bid.objects.filter(uncomplete()=True) 

語法錯誤:關鍵字不能表達

model.py

class Bid(models.Model): 
    time_start = models.DateTimeField() 
    time_end = models.DateTimeField() 
    bid_text = models.CharField(max_length=200, default="") 

    def __str__(self): 
     return self.bid_text 

    @property 
    def uncomplete(self): 
     if datetime.datetime.now().strftime('%s') > self.time_end.strftime('%s'): 
      return False 
     return True 

如何使用模型定義過濾?

+1

爲什麼你會在比較之前轉換日期字符串? –

回答

1

簡而言之,你沒有。您只能在數據庫中的字段上工作

Bid.objects.filter(time_end__gt=datetime.now()) 

順便說一句,這是你不想要的一個好理由。目前,當您撥打uncomplete方法時,您需要進行數據庫查詢以檢索time_end。因此,在過濾器中使用此內容需要您提出兩個查詢,而不僅僅是一個

1

您只能通過模型​​字段進行過濾。

作爲一個解決方案,我可以建議增加一個manager與方法:

from django.utils import timezone 

class BidManager(models.Manager): 

    def uncomplete(self): 
     return self.filter(time_end__gt=timezone.now()) 


class Bid(models.Model): 
    time_start = models.DateTimeField() 
    time_end = models.DateTimeField() 
    bid_text = models.CharField(max_length=200, default="") 

    objects = BidManager() 

    def __str__(self): 
     return self.bid_text 

# and then you can do 
query = Bid.objects.uncomplete() 
相關問題