【发布时间】:2020-05-06 19:31:09
【问题描述】:
如果我的标题对您没有多大意义,我很抱歉。我有一个问题,我在描述它时遇到了问题。如果您能帮助我,我将不胜感激。
我的问题对象有一个小型投票系统。我的问题有很多答案,我在 for 循环的“question_details”中列出。我当然可以访问问题模型,从而获得有关问题投票的信息,但我无法对每个答案都做同样的事情。也许一些代码可以更好地说明:
views.py:
def questiondetails(request, question_pk):
question = get_object_or_404(Question, pk=question_pk)
question_form_id = question
total_voteup = question.total_voteup()
total_votedown = question.total_votedown()
is_voteup = False
is_votedown = False
if question.voteup.filter(id=request.user.id).exists():
is_voteup = True
if question.votedown.filter(id=request.user.id).exists():
is_votedown = True
我可以检查投票情况,我可以检查用户是否投票赞成或反对。
在 questiondetails 的模板中,我正在做类似的事情:
{% for answer in question.answer_set.all %}
{{ answer }}<br>
<div id="answer_voting_section">
{% include 'main/partials/answer_voting_section.html' %}
</div>
{% endfor %}
然后。我可以点击我的问题,它会触发“questiondetails”并将我带到它的页面,其中包含来自这个 for 循环的问题和答案。
我的问题是,我想为来自该 for 循环的每个答案访问“total_voteup”(和其他内容)。
我该怎么做?我是 django 的 python 新手,所以我只知道我能够通过问题和问题详细信息来做到这一点,因为我正在传递一个“question_pk”。我可以在同一个 DEF 中访问与此问题相关的答案吗?或者这是不可能的,因为这些数据对于 django “尚不可见”?
@编辑:
我的模型:
class Question(models.Model):
question = models.CharField(max_length=300)
answered = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
datecompleted = models.DateTimeField(null=True, blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
voteup = models.ManyToManyField(User, related_name='voteup', blank=True)
votedown = models.ManyToManyField(User, related_name='votedown', blank=True)
def __str__(self):
return self.question
def total_voteup(self):
return self.voteup.count()
def total_votedown(self):
return self.votedown.count()
class Answer(models.Model):
question_id = models.ForeignKey(Question, on_delete=models.CASCADE, blank=False, null=True)
answer = models.TextField(max_length=1000)
created = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
answer_voteup = models.ManyToManyField(User, related_name='answer_voteup', blank=True)
answer_votedown = models.ManyToManyField(User, related_name='answer_votedown', blank=True)
def __str__(self):
return self.answer
def total_answer_voteup(self):
return self.answer_voteup.count()
def total_answer_votedown(self):
return self.answer_votedown.count()
【问题讨论】:
-
你能分享你的模型吗?一个人可以对一个问题或一个答案投票吗?
-
我添加了我的模型 ID 编辑。每个用户都可以对所有内容、问题和每个答案进行投票。一个问题可以有很多答案。每次投票都可以是 UP 或 DOWN,如果用户已经投了 UP,他可以通过再点击一次来恢复它。
-
你想计算来自特定用户的总答案吗,我真的不知道你的问题。或对单个问题的总答案。?
如果对于特定问题,您可以使用对象集_set,或者对于用户,您可以编辑实例。 -
好吧,我明白了,我明白了,我想我可以帮助你,给我几分钟。但是答案总票数必须与特定问题相关??
-
当然,非常感谢您抽出宝贵时间。我会等的。
标签: python django django-models django-templates