Проверка, является ли вошедший пользователь автором сообщения | 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 для тегов.

Вернуться на верх