Использование шаблонов Django для Google App Engine для доступа к объекту с определенным значением ReferenceProperty из списка объектов - PullRequest
0 голосов
/ 24 ноября 2011

Я боролся с проблемой в Google App Engine и Django и не смог найти решение (, несмотря на поиск аналог проблемы ).

Позвольте мне немного установить сцену. У меня есть следующие три лица:

Contributor:
    user = db.UserProperty()

Question:
    contributor = db.ReferenceProperty(Contributor, collection_name='questions')
    text = db.TextProperty()

Rating:
    contributor = db.ReferenceProperty(Contributor, collection_name='question_ratings')
    question = db.ReferenceProperty(Question, collection_name='ratings')
    rating = db.IntegerProperty(choices=set([1,2,3,4,5]))

В моем шаблоне Django (ниже) мои общие требования - отображать (1) каждый вопрос, (2) автор вопроса и (3) оценивать вопрос текущим пользователем или нет.

Моя проблема связана с третьим требованием. Я не смог выяснить, как определить, имеет ли Question Rating для Contributor, связанного с током User (т. е. Contributor с пользовательским свойством users.get_current_user()). Как я мог сделать это?

Если такая сущность Rating существует, появится сообщение, похожее на «Вы уже оценили этот вопрос». В противном случае, если таких Rating не существует, будут отображаться варианты оценки вопроса. Вот мой шаблон Django для первых двух требований (и комментарий с описанием третьего).

{% for question in questions %}
    <h1>{{ question.text }}</h1>
    <h2>{{ question.contributor.user.nickname() }}</h2>

    {% comment %}
    if no Rating exists for Question and Contributor:
        <h3>Rating: 1 2 3 4 5</h3>
    else:
        <h3>You have already rated this question.</h3>
    {% endcomment %}
{% endfor %}

Вот скрипт обработчика Python для Google App Engine:

questions = Question.all()

ratings = Rating.all()
ratings.filter('contributor = ', profile)

template_values = {
    'contributor': contributor,
    'questions': questions
}

path = os.path.join(os.path.dirname(__file__), "questions.html")
rendered_text = template.render(path, template_values)
self.response.out.write(rendered_text)

1 Ответ

0 голосов
/ 24 ноября 2011

Лучший способ сделать это - выполнить обработку в вашем коде Python и передать список диктов, которые содержат только соответствующую информацию для вашего шаблона Django. Это также означает, что вы можете воспользоваться преимуществами таких хаков, как предварительная выборка ссылочного свойства , чтобы минимизировать количество RPC, которые вам нужно сделать.

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