если comment.name == пользователь работает некорректно - PullRequest
2 голосов
/ 05 мая 2020

Я хочу, чтобы пользователи могли удалять свои комментарии. К сожалению, я не могу заставить работать if.

 {% if comment.name == user %}

        <a href="{% url 'delete_own_comment' comment.id %}">delete this comment-</a>
        {% endif %}

Чтобы я мог видеть значение user и comment.name, я включил приведенный ниже код. Это было сделано для тестирования и не будет включено в окончательный дизайн сайтов.

<h3 class="article-content">{{ user  }}</h3>

<p class="article-content">{{ comment.name  }}</p>

Я также хотел протестировать, чтобы убедиться, что внутренняя часть оператора if работает.

<a href="{% url 'delete_own_comment' comment.id %}">delete this comment-</a>
            {% endif %}

Итак, я включил приведенный ниже код. Опять же, это не будет включено в мой окончательный дизайн сайтов.

{% if post.author == user %}

        <a href="{% url 'delete_own_comment' comment.id %}">-------delete this comment---------</a>
        {% endif %}

Но, взглянув на снимок экрана, вы можете сказать, что код работает некорректно. 30-й комментарий - это «Тестовый комментарий для целей StackOverflow». Комментарий написан RossSymonds. В настоящее время авторизованный пользователь - RossSymonds. Если бы все работало правильно, вы бы увидели «удалить этот комментарий» (который отличается от «------ удалить этот комментарий ---------»).

Есть ли у кого-нибудь предложение?

enter image description here

{% extends "blog/base.html" %}

{% block content %}
{% load crispy_forms_tags %}


  <article class="media content-section">
    <img class="rounded-circle article-img" src="{{ post.author.profile.image.url }}">
    <div class="media-body">
      <div class="article-metadata">
        <a class="mr-2" href="#">{{ post.author }}</a>
        <small class="text-muted">{{ post.date_posted|date:"F d, Y" }}</small>
        {% if post.author == user %}
          <div>
            <a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'post-update' post.id %}">Update</a>
            <a class="btn btn-danger btn-sm mt-1 mb-1" href="{% url 'post-delete' post.id %}">Delete</a>
          </div>
        {% endif %}
      </div>
      <h2 class="article-title">{{ post.title }}</h2>
      <p class="article-content">{{ post.content }}</p>
    </div>
  </article>


<article class="media content-section">
        <!-- comments -->
         <h3>{{ comments.count }} Comments</h3>

  </article>


        <!-- comments -->


        {% for comment in comments %}
        <article class="media content-section">
        <div class="media-body">

            <small class="text-muted">{{ comment.id}}</small>
            <small class="text-muted">{{ comment.name}}</small>
            <small class="text-muted">{{ comment.created_on|date:"F d, Y" }}</small>
        <div class="media-body ">
          <p class="article-content">{{ comment.body  }}</p>

          <h3 class="article-content">{{ user  }}</h3>

          <p class="article-content">{{ comment.name  }}</p>
        </div>
        </div>

        {% if comment.name == user %}

        <a href="{% url 'delete_own_comment' comment.id %}">delete this comment-</a>
        {% endif %}


        {% if post.author == user %}

        <a href="{% url 'delete_own_comment' comment.id %}">-------delete this comment---------</a>
        {% endif %}




        </article>



        {% endfor %}




 {% if user.is_authenticated %}

 <form action="" method="post">

    {% csrf_token %}
    {{ comment_form|crispy }}
    <input type="submit" value="Submit">
</form>

{% else %}

<article class="media content-section">
Users who are logged in can post comments. 
</article>
{% endif %}

{% endblock content %}

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Пробовали ли вы заменить user на user.username в {% if comment.name == user %}?
{{user}} содержать всю информацию о пользователе (все поля, связанные с моделью пользователя)
Например, если вы хотите получить логин пользователя можно написать {{user.username}}.

1 голос
/ 05 мая 2020

Поскольку строка, содержащая имя пользователя, не совпадает с объектом User с этим именем пользователя.

Вы можете проверить это с помощью:

{% if comment.name == user<b>.username</b> %}
    <!-- &hellip; -->
{% endif %}

Но при этом сохранение имени пользователя не хорошая идея. Представьте, что пользователь позже меняет свое имя пользователя, после чего комментарии больше не «привязаны» к этому пользователю. Обычно используется поле ForeignKey [Django -doc] для ссылки на другой объект модели. Большинство баз данных также обеспечивают ссылочную целостность и, таким образом, гарантируют, что если вы ссылаетесь на пользователя, этот пользователь существует в таблице, на которую вы ссылаетесь.

Таким образом, может быть лучше смоделировать вас Comment как:

from django.conf import settings
from django.db import models

class Comment(models.Model):
    user = models.<b>ForeignKey(</b>
        <b>settings.AUTH_USER_MODEL</b>,
        on_delete=models.CASCADE,
    <b>)</b>
    # &hellip;
...