2011-12-03 14 views
0

私はPythonで新しく、request.GETメソッドを扱うシステムを作っています... 私は日付がシステムにある場合は、データベースを検索し、その日付と他の日付に従ってデータを表示します。それ以外の場合は、他の日付の日付が表示されます。例外: - 'str'と 'datetime.timedelta'のサポートされていないオペランドタイプ

from django.utils.xmlutils import SimplerXMLGenerator 
from piston.handler import BaseHandler 
from booking.models import * 
from django.db.models import * 
from piston.utils import rc, require_mime, require_extended, validate 
import datetime 

class BookingHandler(BaseHandler): 
    allowed_method = ('GET', 'POST', 'PUT', 'DELETE') 
    fields = ('id', 'date_select', 'product_name', 'quantity', 'price','totalcost', 'first_name', 'last_name', 'contact', 'product') 
    model = Booking 
    #for product availability 
    def read(self, request, id, date_select): 
     if not self.has_model(): 
      return rc.NOT_IMPLEMENTED 
     try: 
      prod = Product.objects.get(id=id) 
      merge = [] 
      checkDateExist = Booking.objects.filter(date_select=date_select) 
      if checkDateExist.exists(): 
       entered_date = Booking.objects.values('date_select').distinct('date_select').filter(date_select=date_select)[0]['date_select'] 
      else:    
       enteredTemp_date = datetime.datetime.strptime(date_select, '%Y-%m-%d') 
       entered_date = datetime.datetime.strftime(enteredTemp_date,'%Y-%m-%d') 


      delta = datetime.timedelta(days=3) 
      target_date = entered_date - delta 
      day = 1 
      for x in range(0,5): 
       delta = datetime.timedelta(days=x+day) 
       new_date = target_date + delta 
       maximumProdQuantity = prod.quantity 
       quantityReserve = Booking.objects.filter(date_select=new_date, product=prod).aggregate(Sum('quantity'))['quantity__sum'] 
       if quantityReserve == None: 
        quantityReserve = 0 

       data1 = {'maximum_guest': maximumProdQuantity, 'avialable': quantityReserve, 'date': new_date} 
       merge.append(data1)  

      return merge  
     except self.model.DoesNotExist: 
      return rc.NOT_HERE 

と私はこのエラーを得た:

Piston/0.3dev (Django 1.3.1) crash report: 

Method signature does not match. 

Signature should be: id, date_select 

Exception was: unsupported operand type(s) for -: 'str' and 'datetime.timedelta' 

私は私ので考えます文entered_dateが文字列になると、私はこの行をentered_date = datetime.datetime.strftime(enteredTemp_date,'%Y-%m-%d')とするので、日付書式は2011-12-01 00:00:00ではないので、ちょうど2011-12-01が必要です。私の質問は、どうすれば2011-12-01がdatetime形式の文字列ではないのですか? 誰でも私の事件に関するヒントやアイデアを伝えることができますか? ありがとう

答えて

3

strftimeは、書式設定された文字列を返します。 datetimeオブジェクトの時間部分を破棄するには、datetime.dateを使用してください。

entered_date = datetime.datetime.strptime(date_select, '%Y-%m-%d') 
entered_date = entered_date.date() 
関連する問題