J'ai cette instruction if dans mon modèle pour afficher différents boutons selon si un utilisateur a eu un message. Il existe le même lien de déclenchement, l'URL et la vue, mais le texte dit "J'aime" ou "Contrairement" selon que l'utilisateur a déjà aimé ce post ou non. Cependant, cela ne fonctionne pas, aucune erreur, ne fonctionne pas. Aime est un ManyToManyField
dans le modèle UserPost
.texte différent selon si l'utilisateur a aimé un article
Modèle:
{% 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()
Modèle:
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
Avez-vous vérifié request.user.username et post.likes ont les valeurs que vous pensez avoir? – ifnotX
ouais pour autant que je peux dire qu'ils le font. Je suis connecté sur le site et j'ai aimé un post, et dans l'admin je peux voir que mon nom d'utilisateur est répertorié comme aimant ce poste. – Garrett
Est-ce que cela est passé au modèle cependant? Vous devriez publier la vue depuis views.py. En outre, post.likes.count est-il correct? – ifnotX