2011-03-25 3 views
0

최대 며칠 전까지 다음 쿼리를 성공적으로 사용했습니다.Django : Django QuerySet 날짜가 잘못됨 SELECT

try: 
    totals = MyObject.objects.get(date=report_date) 
except MyObject.DoesNotExist: 
    return HttpResponse('Could not find totals from %s' % (report_date)) 

몇 일 전이 쿼리 데이터가 내가 요구하고있는 일을 위해 존재 하는가에도 불구하고, 빈 검색어 세트를 반환하기 시작 : 다음 쿼리는 항상이 돌아 가정 된 데이터를 반환했습니다.

내가 report_date = date.today().strftime('%Y-%m-%d') 에서 또는 양식

if request.method == 'POST': 
    form = DateForm(request.POST) 
    if form.is_valid: 
    report_date = request.POST['date'] 

모델에서 날짜를 얻고는 대한 사실 데이터에 있다는 것을

class MyObject(models.Model): 
    """Total numbers for a specific day""" 
    date = models.DateField() 
    ... remaining fields ... 

내가 쉘을 통해 확인한 간단하여 DateField()이다 TotalTransactions의 오늘 날짜. 나는 문제없이이 코드를 몇 달 동안 사용 해왔다. 어제 검색어를 통해 작업을했습니다. totals = MyObject.objects.get(date__gte=report_date, date__lte=report_date) 하지만 오늘 아침에는 더 ​​이상 작동하지 않았습니다. 오늘 아침 나는 원래 쿼리 date=report_date을 시도했는데 성공했습니다!

제 질문은 : 그렇다면 누구든지 전에이 문제가 있었습니까 ?? 아무도 내 코드에서 내가 누락 된 것을 볼 수 있습니까? 더 많은 대안에 대한 제안 사항이 있습니까? 시간 내 주셔서 감사합니다.

+0

이것이 실제로는 손상된 db 데이터의 문제라고 생각합니다. 이 쿼리는 작동하지 않기에는 너무 간단합니다. 오늘 살펴 보겠습니다. – dm03514

+0

당신의 SQL 셸에서 또는 파이썬/django 코드에서 원시 SQL을 사용하여 간단한 쿼리를 작성하여 날짜별로이 항목을 검색 할 수 있습니까? –

+0

한 번 더 생각해보십시오. 문제가 로캘과 관련되어 있습니다. 문자열 (날짜 개체가 아님)이있을 때 시스템 로캘이 중요합니다. – Jerzyk

답변

1

왜 문자열로 변환 하시겠습니까? 당신은 날짜가 어떻게 변환되었는지에 대한 통제권을 가지고 있지 않습니다. 로케일 문제 날짜 기반의 쿼리가 일일 작동 아닌 것을

report_date = form.cleaned_data['date'] 
+0

감사합니다, 더 나은 연습, 나는 날짜 obj와 문자열을 모두 시도했습니다. – dm03514

0

사실 : 폼의 cleaned_data 딕셔너리에서

report_date = date.today() 

얻을 데이터 :

date 객체에 스위치와 전용 뷰에서 설정 다음은 암시 적이다. 의심 스럽지만 충분히 확신 할 수있는 코드를 보여주지는 못했지만 의도하지 않게 일부 기본값을 어딘가에 설정했으며 이는 요청에 따라 유지됩니다. 예를 들어

, 당신이 할 경우이 :

class MyModel(models.Model): 
    my_date_field = model.DateField(default=datetime.date.today()) 

필드 디폴트의 값은 서버 프로세스가 시작되고 한 프로세스가 실행되는 동안 동일하게 유지하면 평가 - 일 할 수있는 또는 주.

당신이보기에이 작업을 수행 할 경우에도 마찬가지입니다 :

def my_view(request, date=datetime.date.today()): 
    ... do something with date ... 

보기 인수, 다시보기가 그것을 실행하지 않을 때, 정의 될 때 평가되기 때문에, 따라서 값이 유지됩니다 그 과정이 존재하는 한 동일합니다.

+0

http://docs.djangoproject.com/en/dev/ref/models/fields/#default 모델에 해당하는 경우 함수를 호출하는 대신 함수를 전달할 수 있습니다. 'default = datetime.date.today' – DTing

관련 문제