AttributeError:' Driver'对象没有属性' id'

时间:2015-04-14 22:29:44

标签: python django google-app-engine

我在app引擎上进行了部署,我在尝试分配旅行时遇到此错误

def get(self):
    from trips.end_trip import notify_cancelation
    """
    GET /2/drivers/report_trip_arrival
    >  trip_id /custom_id
    > device_id
    > driver_id
    > event_timestamp
    <  200 application/json
    Changes the trip status to 4, your taxi has arrived
    """
    responseJSON = {}
    self.response.headers['Content-Type'] = "application/json"
    trip_id = self.request.get("trip_id")
    custom_trip_id = self.request.get("custom_id")
    device_id = self.request.get("device_id")

    logging.info("Report arrival")
    logging.info(str(trip_id))
    logging.info(str(custom_trip_id))
    logging.info(str(device_id))

    #Get the trip
    # fixing
    try:
        trip = trip_finder.find_trip(trip_id=trip_id, custom_id=custom_trip_id)
    except:
        trip = None
        responseJSON["Status"] = "OK"
        return

    driver_id = self.request.get('driver_id')
    if driver_id:
        driver_id = int(driver_id)
        if trip.selected_driver.get().id() != driver_id:
            responseJSON = {'status': 'OK', 'Staus': 'OK'}
            json.dump(responseJSON, self.response.out)
            return

    if trip:
        #deferred.defer(notify_arrival, trip.key.id(), _queue="delivery")
        params = {}
        params["trip_id"] = trip.key.id()
        taskqueue.add(url="/2/delivery/task/notify_arrival", params=params, queue_name="delivery")

        last_status = trip.last_status()

        #If we are already on status 4, we just return OK
        if last_status.id != "4":
            #Update the status
            #ripStatus(trip=trip.key, id="4", message=trip_statuses["4"], timestamp=now()).put()
            trip.change_status("4")
            #Alert the passenger
            name = trip.traveler_name.split()[0] if trip.traveler_name else ""
            message_status = name + ", ha llegado tu taxi :)"
        responseJSON["Status"] = "OK"
        responseJSON["status"] = "OK"
        # if the trip was canceled notify the driver
        if last_status.id == "16":
            #deferred.defer(notify_cancelation, trip.key.id(), _queue="endtrip")
            params = {'trip_id': trip.key.id()}
            taskqueue.add(url="/2/trips/task/notify_cancelation", params=params, queue_name="endtrip")
            #deferred.defer(notify_cancelation, trip.key.id(), _queue="endtrip")
    else:
        responseJSON["Status"] = "OK"
        responseJSON["status"] = "OK"

    self.response.out.write(json.dumps(responseJSON))

这是完整的细节:

Traceback (most recent call last):
 File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch
   return method(*args, **kwargs)
 File "/base/data/home/apps/s~precise-line-762/v-4-4-03.383164018327881359/security/security.py", line 47, in wrapper
   return handler(request)
 File "/base/data/home/apps/s~precise-line-762/v-4-4-03.383164018327881359/drivers/handlers.py", line 141, in get
   if trip.selected_driver.get().id() != driver_id:
 File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 3640, in __getattr__
   return super(Expando, self).__getattribute__(name)
AttributeError: 'Driver' object has no attribute 'id'

1 个答案:

答案 0 :(得分:0)

您必须从ID属性中选择对象key

看起来您的trip.selected_driver已成为密钥。如果要确保对象存在,请调用trip.selected_driver.get().key.id()