我找到了附加到特定question
的Upvote
模型实例的列表,因此我可以检查当前用户是否已上传问题。我想显示一个不同的按钮,如果用户已经upvoted这个特定的问题。问题是,目前的{% if .. %}
标签不起作用,因为一个问题可以有很多upvotes。我只需要{% if ..%}
标签即可查看是否其中一个upvote.user == request.user
。Django - 循环模板列表以检查值是否存在,稍后显示
我该如何处理这种情况?我正在寻找不同的解决方案,比如创建一个变量,并在发现匹配时将其设置为True(看起来很难),或者编写自定义模板标签。尽管如此,我觉得我过分复杂化了这个问题。
HTML模板
{% for question in questions %}
{% for upvote in question.upvote_set.all %}
{% if upvote.user == request.user %}
# Display the upvote button
{% else %}
# Display a different button
{% endif %}
{% endfor %}
models.py
class Question(models.Model):
# ... code
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='question', null=True, blank=True)
class Upvote(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE, null=True, blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
我爱你。我只是设法用你的第一个解决方案来解决它。我们需要将pk添加到'request.user',因为'values_list('user')'返回用户的pk。因此,通过使用'{%if request.user.pk question.upvoters%}',它可以工作!我并不太在意繁重的交通处理工作,所以现在这样做。 – Valachio