我找到了附加到特定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