私のテンプレートには、ユーザーが投稿したかどうかによって異なるボタンを表示するためのif文があります。同じトリガーリンク、URL、およびビューがありますが、ユーザーがその投稿を好きだったかどうかによって、テキストに「好き」または「違う」と表示されます。しかし、それは動作していません、エラー、ないだけで動作しません。投稿ごとに異なるテキストが表示される
好きなものはUserPost
モデルのManyToManyField
です。
テンプレート:
{% for post in posts %}
<div class="single-post">
<div class="post-header">
<a class="link inline-block" href="{% url 'feed:post_detail' post.id %}">
<h2 class="post-title">{{ post.title }}</h2>
</a>
<div class="post-interaction">
{% if request.user.username in post.likes %}
<a class="link right-margin" href="{% url 'feed:post_like' post.id %}">
Unlike: {{ post.likes.count }}
</a>
{% else %}
<a class="link right-margin" href="{% url 'feed:post_like' post.id %}">
Like: {{ post.likes.count }}
</a>
{% endif %}
<a class="link right-margin" href="{% url 'feed:post_detail' post.id %}">
Comments: {{ post.comments.count }}
</a>
</div>
</div>
{% if post.image %}
<img class="post-pic" src="{{ post.image.url }}">
{% endif %}
<p class="post-body more-top-margin">{{ post.post_body }}</p>
<div class="divider"></div>
<p class="message-hint post-meta">{{ post.author }}</p>
<p class="message-hint post-meta">{{ post.post_date }}</p>
{% if request.user.is_authenticated and request.user == post.author or request.user.userprofile.user_level == 'admin' or request.user.userprofile.user_level == 'moderator' %}
<a class="link right-margin" href="{% url 'feed:edit_post' post.id %}">
Edit Post
</a>
<a class="link right-margin" href="{% url 'feed:delete_post' post.id %}">
Delete Post
</a>
{% endif %}
</div>
{% endfor %}
Views.py:
class HomeView(LoginRequiredMixin,ListView):
login_url = 'account_login'
model = UserPost
template_name = 'feed/userpost_list.html'
context_object_name = 'posts'
paginate_by = 25
queryset = UserPost.objects.all()
モデル:あなたがフラットなリストとして同類をエクスポートUserPostモデルに機能を追加することができ
class UserPost(models.Model):
author = models.ForeignKey(User,related_name='userpost',null=True)
post_date = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=150,blank=False)
post_body = models.TextField(max_length=1000,blank=False)
image = models.ImageField(upload_to='post_pics',blank=True)
likes = models.ManyToManyField(User,blank=True,related_name='post_likes')
class Meta:
ordering = ['-post_date']
def publish(self):
self.save()
def get_absolute_url(self):
return reverse('index')
def likes_as_flat_user_id_list(self):
return self.likes.values_list('user_id', flat=True)
def __str__(self):
return self.title
あなたはrequest.user.usernameをチェックしましたか?post.likesにはあなたが持っていると思う値がありますか? – ifnotX
ええ、彼らが言うことができる限り。私はサイトにログインしていて、投稿が気に入っていて、管理者で私のユーザー名がその投稿を好きなようにリストされていることがわかります。 – Garrett
それはテンプレートにも渡されていますか? views.pyからビューを投稿する必要があります。また、post.likes.countはOKから来ていますか? – ifnotX