2013-12-09 4 views
0

У меня есть эта сущность рода книга (ndb.Model):Google App Engine: Создание категории сущностей

class Book(ndb.Model): 
    title = ndb.StringProperty(required = True) 

Каждая книга сущность должна быть «к категории» в заранее определенных категорий в соответствии с его жанром (пример : 'Ужас', 'фантазия', 'Романс', и т.д ...)

Я надеюсь построить Жанр Ссылки Меню жанров, как это:

<ul> 
    <li><a href="/genre/horror">Horror</a></li> 
    <li><a href="/genre/fantasy">Fantasy</a></li> 
    <li><a href="/genre/romance">Romance</a></li> 
</ul> 

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

class Book(ndb.Model): 
    title = ndb.StringProperty(required = True) 
    genre = ndb.StringProperty(choices = ['Horror', 'Fantasy', 'Romance']) 

Однако этот метод не кажется слишком масштабируемой и не адаптируются; то есть, если я хочу включить новую категорию, мне нужно будет вручную отредактировать class Book(ndb.Model), а также Меню ссылок по жанрам, а также формы для создания и редактирования Объекты заказов. Например:

# new-book.html 
<form method="post"> 

    <label>Book Title:<br><input type="text" name="title"></label> 

    <label>Genres:<br> 
      <input type="checkbox" name="genre" value="horror">Horror<br> 
      <input type="checkbox" name="genre" value="fantasy">Fantasy<br> 
      <input type="checkbox" name="genre" value="romance">Romance<br> 
      # Adding New Genre */ 
      <input type="checkbox" name="genre" value="mystery">Mystery<br> 
    </label> 
    <input type="submit"> 
</form> 

Должен быть лучший способ! Спасибо за любой отзыв!

ответ

2

Что вам нужно установить свойство как «повторил»

class Book(ndb.Model): 
    title = ndb.StringProperty(required = True) 
    genre = ndb.StringProperty(repeated=True) 

, который позволит вам добавить и запрос произвольное количество категорий.

https://developers.google.com/appengine/docs/python/ndb/properties?hl=de#repeated

+0

@haopei обработка что? Что вы имеете в виду? Он работает прозрачно. – rdodev

+0

Спасибо за ваш ответ, rdodev. Проблема использования этого метода здесь заключается в следующем: как вы будете строить «ссылки в жанре меню» или запрашивать список всех категорий при создании флажков? Например, если 'example.com/book/1' является' ['Mystery', 'Horror'] ', в то время как' example.com/book/2' является '['Romance']', тогда как бы вы запросили все три категории обеих книг, которые будут использоваться для создания меню ссылок? – puoyaahhh

+2

Это не совсем так. Когда вы выдаете запрос равенства с повторным свойством, он будет соответствовать всем объектам, в которых совпадают любые повторяющиеся свойства. Если вы хотите запросить книги, в которых у них есть жанр «Романтика» и «Ужас», вы можете сделать это с помощью запроса AND: жанр == «Романтика» и жанра == «Ужас». Если вы хотите, чтобы все книги, которые соответствовали Romance OR Horror, вы могли использовать genre.in ([«Романтика», «Ужас»)). См. Эту страницу о повторяющихся запросах свойств: https://developers.google.com/appengine/docs/python/ndb/queries#repeated_properties. –

Смежные вопросы