如何使用模型的定义进行过滤?

时间:2015-11-02 09:46:06

标签: django django-models django-views

在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

如何使用模型的定义进行过滤?

2 个答案:

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