отношения один-много-Google DataStore-Python - PullRequest
1 голос
/ 28 октября 2010

У меня есть две модели, как показано ниже: -

class Food(db.Model):
      foodname=db.StringProperty()
      cook=db.StringProperty()

class FoodReview(db.Model):
      thereview=db.StringProperty()
      reviews=db.ReferenceProperty(Food,collections_name='thefoodreviews')

Я продолжаю создавать сущность: -

s=Food(foodname='apple',cook='Alice')`   
s.put()

Когда кто-то пишет отзыв, функция, которая выполняет нижевступает в игру:

theentitykey=db.Query(Food,keys_only=True).filter('foodname =','apple').get()
r=FoodReview()
r.reviews=theentitykey #this is the key of the entity retrieved above and stored as a ref property here
r.thereview='someones review' #someone writes a review
r.put()

Теперь проблема в том, как получить эти отзывы.Если я знаю ключ сущности, я могу сделать следующее: -

theentityobject=db.get(food-key) # but then the issue is how to know the key
for elem in theentityobject.thefoodreviews:
       print elem.thereview

, иначе я могу сделать что-то вроде этого: -

theentityobj=db.Query(Food).filter('foodname =','apple').get()

и затем выполнить итерацию, как указано вышено правильны ли два вышеуказанных способа?

Ответы [ 2 ]

1 голос
/ 29 октября 2010

Если получить еду, которую вы всегда делаете, db.Query (Food) .filter ('foodname =', 'apple'), то похоже, что ваше имя - ваш ключ ... Почему бы просто не использовать его в качестве имени ключа?

Затем вы можете даже получить отзывы, не выбирая саму еду:

key = db.Key.from_path('food', 'apple')
reviews = FoodReview.all().filter("reviews =", key)
0 голосов
/ 28 октября 2010

Второй метод выглядит точно так же, как совет учебника AppEngine.Похоже, что это правильно, если вы хотите найти все отзывы для конкретного названия продукта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...