Я боролся с проблемой в 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)