Проверка, является ли вошедший пользователь автором сообщения | Django | If-else не работает
Я хочу проверить, является ли зарегистрированный пользователь автором сообщения на моем форуме. Я написал некоторый код, чтобы выяснить это:
<div class="right-section-posts">
user: {{ user }} <!--Output: Admin-->
author: {{ post.author }} <!--Output: Admin-->
{% if user == post.author %}
<form action="DELETE">
{% csrf_token %}
<button type="submit" class="delete-btn" name="post-id" value="{{ post.id }}">Delete</button>
</form>
<a href=""><button class="edit-btn">Edit</button></a>
{% endif %}
</div>
Они оба выводят одно и то же, но утверждение возвращает false! Почему?
Models.py
class Post(models.Model):
vote_count = models.IntegerField(default=0)
id = models.BigAutoField(primary_key=True)
created_at = models.DateField(default=date.today)
title = models.CharField(max_length=100)
description = models.CharField(max_length=1000)
tags = models.CharField(max_length=200)
author = models.CharField(max_length=100, default="none")
def __str__(self):
return str(self.id) + ' ' + self.title
Я пробовал разные способы получить Текущего пользователя и автора. Не работает.
(Я думаю, вы можете сказать, что я должен использовать ForeignKey
вместо ´CharField´, при использовании этого я получаю эту ошибку:
ERROR: Column forum_app_post.author_id does not exist.
LINE 1: ...app_post". "description", "forum_app_post". "tags", "forum_app...
^
HINT: Perhaps the intention was to refer to the "forum_app_post.author" column.
)
Поле author
не может быть CharField, потому что оно представляет пользователя. Вам необходимо установить поле author
как foreignkey.
Вам нужно обновить модель следующим образом:
from django.contrib.auth.models import User
class Post(models.Model):
vote_count = models.IntegerField(default=0)
id = models.BigAutoField(primary_key=True)
created_at = models.DateField(default=date.today)
title = models.CharField(max_length=100)
description = models.CharField(max_length=1000)
tags = models.CharField(max_length=200)
author = models.ForeignKey(User,on_delete= models.CASCADE, verbose_name='Post Author')
def __str__(self):
return str(self.id) + ' ' + self.title
Если вы хотите проверить вошедшего пользователя по всем зарегистрированным сообщениям, вы должны сначала получить все сообщения.
def get_all_posts(request):
posts = Post.objects.filter.all()
context = {
"posts" : posts,
}
return render(request,"my_page.html",context)
Затем в html-странице :
<div class="right-section-posts">
{% if posts %}
{% for post in posts %}
{% if request.user == post.author %}
<!--do what you want here-->
{% else %}
{% endif %}
{% endfor %}
{% else %}
<div class="alert alert-info">You have no registered post yet!</div>
<!-- /.container-fluid -->
</div>
{% endif %}
</div>
Я также рекомендую использовать django-taggit для тегов.