طريقة get_by_id على الطبقات النموذجي في محرك جوجل التطبيق مخزن البيانات

StackOverflow https://stackoverflow.com/questions/649284

سؤال

وأنا غير قادر على تجريب كيف يمكنك الحصول على الكائنات من محرك جوجل التطبيق مخزن البيانات باستخدام get_by_id. هنا هو النموذج

from google.appengine.ext import db

class Address(db.Model):
  description = db.StringProperty(multiline=True)
  latitude = db.FloatProperty()
  longitdue = db.FloatProperty()
  date = db.DateTimeProperty(auto_now_add=True)

وأنا يمكن أن تخلق لهم، ووضعها، واسترجاعها مع GQL.

address = Address()
address.description = self.request.get('name')
address.latitude = float(self.request.get('latitude'))
address.longitude = float(self.request.get('longitude'))
address.put()

وعنوان المحفوظة لديها قيم

>> address.key()
aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw
>> address.key().id()
14

ويمكن أن أجد لهم باستخدام مفتاح

from google.appengine.ext import db
address = db.get('aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw')

ولكن لا يمكن العثور عليها من قبل معرف

>> from google.appengine.ext import db
>> address = db.Model.get_by_id(14)

والعنوان هو بلا، عندما أحاول

>> Address.get_by_id(14)
AttributeError: type object 'Address' has no attribute 'get_by_id'

وكيف يمكنني أن أجد من معرف؟

وتحرير: وتبين أنا أحمق وكان يحاول العثور على نموذج عنوان في وظيفة تسمى العناوين. شكرا لإجاباتك، لقد شهد براندون كما الإجابة الصحيحة كما حصل في أول وثبت جميعا أن نعمل.

هل كانت مفيدة؟

المحلول

وحاولت فقط على shell.appspot.com ويبدو أن تعمل بشكل جيد:

Google Apphosting/1.0
Python 2.5.2 (r252:60911, Feb 25 2009, 11:04:42) 
[GCC 4.1.0]

>>> class Address(db.Model):
  description = db.StringProperty(multiline=True)
  latitude = db.FloatProperty()
  longitdue = db.FloatProperty()
  date = db.DateTimeProperty(auto_now_add=True)

>>> addy = Address()
>>> addyput = addy.put()
>>> addyput.id()
136522L
>>> Address.get_by_id(136522)
<__main__.Address object at 0xa6b33ae3bf436250>

نصائح أخرى

ومفتاح وهو التطبيق هو قائمة (النوع، id_or_name) الصفوف - للكيانات الجذر، دائما سوى عنصر واحد لفترة طويلة. وهكذا، فإن ID وحدها لا تحدد كيان - مطلوب أيضا نوع من الكيان. عند استدعاء db.Model.get_by_id (خ)، كنت طالبا للكيان مع مفتاح (النموذجي، خ). ما تريده هو أن ندعو Address.get_by_id (خ)، الذي يجلب الكيان مع مفتاح (عنوان، خ).

ويجب عليك استخدام نوع طويل في get_by_id ( "هنا"). يجب أن يكون نوع int رسالة خطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top