2015-12-31 1 views
3

Моя модельКак эффективно использовать date__range фильтр Джанго

class SMS(models.Model): 
    subscriberId = models.ForeignKey(Subscriber, null=False) 
    epochTime = models.IntegerField(null = False) 
    time = models.CharField(max_length= 250 ,blank = False) 
    date = models.CharField(max_length= 50 ,blank = False) 

Теперь вопрос я дата сохранения в качестве символа 1-11-2015 и используя date__range фильтр так:

SMS.objects.filter(date__range =["1-11-2015","12-11-2015"]).count() 

Но это дает мне неправильные результаты.

Итак, как эффективно использовать этот фильтр date__range?

+0

просто использовать DateTimeField insted Char –

+0

Или, возможно, 'DateField' – Wolph

ответ

0

Ну, вы делаете __range оператором на CharField, поэтому сравнение диапазона выполняется по принципу символа, а не по дате.

У вас уже есть поле epochTime = models.IntegerField(null = False), я буду считать, что эпоха времени UNIX.

Чтобы начать софт, вы уже можете сделать запрос epochTime__range, который может правильно дать результаты, если вы пройдете диапазон epochTime__range=(timestamp_integer_start, timestamp_integer_end). You'll have to pass an integer that represents the date/time for this.

В противном случае вы можете добавить timestamp = models.DateTimeField() и скопировать значения из поля epochTime.

Это легко конвертировать из UNIX timestamp in integer format to a Python datetime object, которое вы можете передать в качестве значения для DateTimeField в Django.

Нижняя строка, не нужно дублировать поля date и time в вашей модели, используйте одно поле, которое представляет метку времени. Я рекомендую DateTimeField, потому что ваши запросы будут проще в Django.

Смежные вопросы