2015-11-02 28 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() 
相关问题