在这里,我要检查问题的答案是否已被当前用户投票。
为此,我尝试了这种方法,但我认为这行不通。
出于某种目的,我想在模板中执行此操作,例如{% if a_voted %}Voted{% else %}Vote{% endif %}
。
我做了一个问题,但是在回答问题时卡住了。
模型
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='answers')
ans = models.TextField()
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='user_answers')
class AnswerVote(models.Model):
answer = models.ForeignKey(Answer, on_delete=models.CASCADE, related_name='answer_votes')
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_votes_ans')
观看次数
class DetailQuestionView(LoginRequiredMixin, View):
template_name = 'post_detail.html'
def get(self, request, **kwargs):
question = get_object_or_404(Question, pk=kwargs['pk'])
q_voted = question.question_votes.filter(user=request.user, question=question).exists()
answers = question.answers.all()
a_voted = [True if answer.answer_votes.filter(user=request.user, answer=answer).exists() else False for answer in answers]
context = {
'question': question,
'q_voted': q_voted,
'a_voted': a_voted,
}
模板
{% for answer in question.answers.all %}
<p>{{answer.ans}}</p>
<form action="{% url 'qa:vote_ans' answer.pk %}" method="post" id="a-vote-form ">
{% csrf_token %}
<button type="submit"
class="{% if a_voted %}btn btn-danger disabled{% else %} btn btn-success{% endif %}">
{% if a_voted %}Voted{% else %}Vote{% endif %}</button>
</form>
{% endfor %}
答案 0 :(得分:0)
我通过列出当前用户的投票答案来解决此问题,并检查答案是否在投票答案列表中,如这样的模板
观看次数
a_voted_list = [answer for answer in answers if answer.answer_votes.filter(user=request.user, answer=answer)]
模板
{% if answer in a_voted_list %}Voted{% else %}Vote{% endif %}</button>
如果有更好的方法,请告诉我。
答案 1 :(得分:0)
由于您可以通过a_voted_list
访问用户投票的答案列表,因此无需创建user.answervote_set.all()
{% if answer in request.user.answervote_set.all %}Voted{% else %}Vote{% endif %}