在django 1.8 python3.4
view.py
Bid_data = Bid.objects.filter(uncomplete()=True)
SyntaxError:keyword不能是表达式
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
如何使用模型的定义进行过滤?
答案 0 :(得分:1)
简单地说,你没有。您只能处理数据库中的字段
Bid.objects.filter(time_end__gt=datetime.now())
顺便说一句,这是你不想要的一个很好的理由。目前,当您调用uncomplete
方法时,您需要进行数据库查询才能检索time_end
。因此,在过滤器内使用此内容需要您进行两次查询,而不仅仅是一次
答案 1 :(得分: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()