2015-06-08 33 views
0

首先感謝您看我的問題。更改查詢在Django根據星期幾

我正在尋找一種方法來存儲模型中的星期幾,我已經確定在模型中每週的每一天都有一個布爾值可能是最簡單的方法。我曾看過使用位標記,但又不確定如何查詢。

我的模型看起來像下面

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) 

我需要做的是改變查詢根據當前的一天,如果這一天是什麼星期一查詢應該尋找一個規則布爾值星期一=真

我希望我已經清楚在我的問題,我是相當新的Django和Python。

親切的問候

+3

可以超過一天爲真?爲什麼不有一個int weekday字段,其中0 =星期一,1 =星期二等?然後你只要查詢'weekday =?' – user3557327

+0

即使幾天可以成爲'True',將它們存儲爲['ArrayField'](https://docs.djangoproject.com/en/1.8/ref/contrib/postgres/fields /#arrayfield)或'IntegerField',其值爲:1 =星期一,2 =星期二,4 =星期三等等,這取決於你的需要。 – sobolevn

回答

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/

注意:如果你不打算讓用戶能夠在混天相同的模型實例,您應該使用帶有選項的整數字段,而不是像註釋中所建議的那樣。