根据星期几更改Django中的查询

时间:2015-06-08 19:09:50

标签: python django

首先感谢您查看我的问题。

我正在寻找一种方法来存储模型中的星期几,我已经确定模型中每周的每一天都有一个布尔值可能是最简单的方法。我曾经看过使用bitflags,但又不确定如何查询。

我的模型如下所示

function searchItem(itemname) {
    listings = $(".item-name");
    for(var i = 0; i < listing.length; i++) {
        element = listing[i];
        if(element.html().indexOf(itemname) !== -1) {
            return true; 
          } 
    }
}

我的查询就像下面的

class CallForwardingRule(models.Model):
    forward_to =  models.CharField(max_length=255,null=False,blank=False)
    start_time = models.TimeField(default=time(0,0))
    end_time = models.TimeField(default=time(0,0))
    active = models.BooleanField(default=True)
    monday = models.BooleanField(default=False)
    tuesday = models.BooleanField(default=False)
    wednesday = models.BooleanField(default=False)
    thursday = models.BooleanField(default=False)
    friday = models.BooleanField(default=False)
    saturday = models.BooleanField(default=False)
    sunday = models.BooleanField(default=False)

我需要做的是根据当天更改查询,如果日期是星期一查询应查找布尔值monday = True

的规则

我希望我的问题清楚,我对Django和Python都很陌生。

亲切的问候

2 个答案:

答案 0 :(得分:0)

您可以使用自定义管理器。说

class TodayManager(models.Manager):
    def get_queryset(self, *args, **kwargs):
        today = self.weekday_as_string()
        return super(TodayManager, self).get_queryset(*args, **kwargs).filter(
            **{today: true})

    def weekday_as_string(self):
        # TODO

class CallForwardingRule(models.Model):
    # your fields

    of_today = TodayManager()

并且像这样查询:

CallForwardingRule.of_today.filter(
    start_time__lte=time,end_time__gte=time)

在此处阅读有关对象管理员的更多信息https://docs.djangoproject.com/en/1.8/topics/db/managers/

注意:如果您不希望用户能够在同一模型实例中混合天数,则应使用带有选项的整数字段,如评论中所示。

答案 1 :(得分:0)

你应该为你的dayofweek使用整数或charfield。它们中的每一个都可以与选项(https://docs.djangoproject.com/en/1.8/ref/models/fields/#choices)一起使用,这使您可以更轻松地将当天的代码翻译为其名称。

然后,您只需使用此字段过滤您的查询集。