У меня есть эта сущность рода книга (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>
Должен быть лучший способ! Спасибо за любой отзыв!
@haopei обработка что? Что вы имеете в виду? Он работает прозрачно. – rdodev
Спасибо за ваш ответ, rdodev. Проблема использования этого метода здесь заключается в следующем: как вы будете строить «ссылки в жанре меню» или запрашивать список всех категорий при создании флажков? Например, если 'example.com/book/1' является' ['Mystery', 'Horror'] ', в то время как' example.com/book/2' является '['Romance']', тогда как бы вы запросили все три категории обеих книг, которые будут использоваться для создания меню ссылок? – puoyaahhh
Это не совсем так. Когда вы выдаете запрос равенства с повторным свойством, он будет соответствовать всем объектам, в которых совпадают любые повторяющиеся свойства. Если вы хотите запросить книги, в которых у них есть жанр «Романтика» и «Ужас», вы можете сделать это с помощью запроса AND: жанр == «Романтика» и жанра == «Ужас». Если вы хотите, чтобы все книги, которые соответствовали Romance OR Horror, вы могли использовать genre.in ([«Романтика», «Ужас»)). См. Эту страницу о повторяющихся запросах свойств: https://developers.google.com/appengine/docs/python/ndb/queries#repeated_properties. –