根据日期更改Django中的查询

2024-10-01 02:25:21 发布

您现在位置:Python中文网/ 问答频道 /正文

首先谢谢你看我的问题。你知道吗

我正在寻找一种在模型中存储一周中的某一天的方法,我已经确定在模型中为一周中的每一天设置一个布尔值可能是最简单的方法。我已经考虑过使用位标志,但又不确定如何查询它。你知道吗

我的模型如下

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)

我的问题如下

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

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

我希望我的问题已经很清楚了,我对Django和Python还很陌生。你知道吗

谨致问候


Tags: 方法模型falsetruedefaulttimemodels标志
2条回答

您应该为dayofweek使用整数或charfield。它们中的每一个都可以与选项(https://docs.djangoproject.com/en/1.8/ref/models/fields/#choices)一起使用,这样您就可以更容易地将一天的代码翻译成它的名字。你知道吗

然后,您只需使用此字段过滤查询集。你知道吗

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

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/

注意:如果您不希望用户能够在同一个模型实例中混合天数,那么应该使用带有选项的整数字段,如注释中所建议的那样。你知道吗

相关问题 更多 >