Показывать сообщения пользователя в его профиле на django - PullRequest
0 голосов
/ 06 мая 2020

Я пытался сделать так, чтобы на странице профиля пользователя были его сообщения, но каждый раз, когда я запускаю свой код, ничего не отображается, только имя пользователя и адрес электронной почты пользователя. Я пробовал несколько способов заставить его работать, но почему-то это не так. Я думаю, что в профиле. html есть ошибка.

views.py

    def profile(request, pk=None):
        if pk:
            post_owner = get_object_or_404(User, pk=pk)
            user_posts=Post.objects.filter(posti=request.user)

        else:
            post_owner = request.user
            user_posts=Post.objects.filter(posti=request.user)
        return render(request, 'profile.html', {'post_owner': post_owner, 'user_posts': user_posts})

models.py

    class Post(models.Model):
        text = models.CharField(max_length=200)
        posti = models.ImageField(upload_to='media/images', null=True, blank="True")
        user = models.ForeignKey(User, related_name='imageuser', on_delete=models.CASCADE, default=2)

profile. html

    <div class="content-section">
      <div class="media">
        <img class="rounded-circle account-img" src="{{ user.profile.image.url }}">
        <div class="media-body">
          <h2 class="account-heading">{{ post_owner.username }}</h2>
          <p class="text-secondary">{{ post_owner.email }}</p>
        </div>
        {% for Post in user_posts %}
          <li class="list-group-item">{{ Post.text }}
            <a href="{% url 'profile_pk' pk=image.user.pk %}">{{ Post.user }}</a>
            {% if Post.posti %}
              <img src="{{ image.posti.url }}" alt="image here" style="max-width: 300px; max-height: 300px">
            {% endif %}
            {% if Post.user == user %}
              <div class="float-right">
                <form action="delete_image/{{ image.id }}/" action="post">
                  <button type="submit" class="btn btn-outline-danger btn-sm">Delete</button>
                </form>
              </div>
            {% endif %}
          </li>     
        {% endfor %}
      </div>
    </div>

Ответы [ 2 ]

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

Проблема здесь в строке:

user_posts=Post.objects.filter(posti=request.user)

Чтобы получить сообщения от вошедшего в систему пользователя, вам нужно будет использовать это:

user_posts=Post.objects.filter(user=request.user)

и получить сообщения от выбранного пользователя вам нужно будет сделать это:

user_posts=Post.objects.filter(user_id=pk)

Надеюсь, это поможет :)

0 голосов
/ 06 мая 2020

Вы запрашиваете неправильный столбец:

user_posts=Post.objects.filter(posti=request.user)

posti - это ImageField. На самом деле вы хотите запросить поле user:

user_posts=Post.objects.filter(user=request.user)

При этом вам не нужны ни один из этих запросов в вашем представлении. Вы можете просто использовать свой related_name, например:

{% for Post in post_owner.imageuser.all %}
...