2017-03-27 23 views
1

日期是字符串格式的數據庫使用__gte字符串日期的Django

class A(models.Model): 
    date = models.CharField(max_length=50, blank=True, null=True) 

耶,我知道它應該是日期類型。 但現在我們有很多記錄,我們很快就會將其更改爲日期類型。 對於當前狀態,我想獲取大於特定日期的對象。 因此,如何能我使用date__gte

例如

objs = A.objects.filter(date__gte=datetime.now()) 

有沒有辦法實現這個無需轉換日期時間字段。

+0

什麼是日期的字符串格式?可能_lexicographical ordering_可能被利用來得到你想要的。 –

+0

你需要['strftime'](https://docs.python.org/2/library/datetime.html#datetime.date.strftime)你的日期,它應該沒有問題(格式字符串取決於你)。 – RompePC

回答

0

如果沒有轉換(在Django或查詢過程中的數據庫中)到正確的DateTime類型,沒有辦法做到這一點。您正試圖將datetime.datetimestr進行比較。這在普通的Python中不起作用,並且在這裏不起作用。

0

什麼樣的字符串?如果它被格式化爲%Y%m%d,則可以使用.extra()方法來執行查詢。

A.objects.extra(where=['date >= date_of_today']) 
+0

使用額外的是非常不鼓勵。它爲黑客敞開了一扇大門。 –

+0

@ÖzerS。沒有用戶輸入值。你是什​​麼意思? – Guinner

+0

date_of_today是可變的權利? – Gaurav

1

我不確定這是否奏效。你可以嘗試的是一個自定義管理器。因此,您可以爲您的模型創建一個管理器,添加諸如date_gte之類的內容,然後將該字符串轉換爲日期時間。然後,您可以照常使用這些運營商。這是目前的一個快速解決方案,但最好的解決方案是使用一個DateTimeField,就我所知,您想要做的就是這樣。

舉例經理:

from django.db import models 

class MyManager(models.Manager): 

    def date_gte(self, date=datetime.now()): 
     items = [] 
     for obj in self.all(): 
      if datetime(obj.date) < date: 
       items.append(obj) 
     return items 

然後,你可以把它像MyModel.objects.date_gte(date=datetime.now())

注意:這是一個昂貴的查詢,您可能需要將簡單列表轉換爲QuerySet對象。我沒有測試過,所以這個例子只能幫助你開始。