Как показать опубликованный пользователем блог на странице профиля пользователя как раздел списка моих сообщений в Django 3?

#django #django-views #django-templates #django-queryset

#django #django-просмотры #django-шаблоны #django-набор запросов

Вопрос:

Я новый ученик Django. Я создал веб-сайт блога с двумя приложениями blog и user. В пользовательском приложении я создал страницу профиля пользователя с двумя разделами «Основная информация о пользователе» и «список моих сообщений». Когда пользователь входит в систему и посещает страницу своего профиля, в разделе «Список моих сообщений» отображается только опубликованный пользователем пост, в противном случае отображается, что вы еще не опубликовали ни одного поста. Все работает нормально, но в разделе «мой список сообщений» отображаются все сообщения в блоге. Я хочу показывать только сообщение этого пользователя, а не сообщения других пользователей. Я думаю, что набор запросов в разделе «Просмотр» необходимо изменить, но я не могу понять, что будет. Вот мой код —

#Приложение для блога: модель публикации

    class Post(models.Model):
          title = models.CharField(max_length=200, unique=True)
          slug = models.SlugField(max_length=200, unique=True)
          author = models.ForeignKey(User, on_delete= models.CASCADE, related_name='blog_posts')
          updated_on = models.DateTimeField(auto_now= True)
          content = models.TextField()
          created_on = models.DateTimeField(auto_now_add=True)
          
          class Meta:
              ordering = ['-created_on']

         def __str__(self):
              return self.title
  

#Пользовательское приложение: модель профиля

 class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    pic = models.ImageField(default='images/default.jpg', upload_to='images')
    about = models.TextField(blank=True)
  

#Пользовательское приложение: views.py

 from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView, ListView
from blog.models import Post

class UserProfileView(LoginRequiredMixin, ListView):
     queryset = Post.objects.all()
     template_name = "profile.html"
  

# Раздел «Мои списки сообщений» в profile.html страница

 <div class="user-post-list mt-4">
                    <h4>My Post Lists</h4>
                    <div class="table-responsive mt-4 mb-5">
                        <table class="table table-hover">
                            <thead>
                                <tr class="text-left">
                                    <th>TITLE</th>
                                    <th>CREATED ON</th>
                                    <th>UPDATED ON</th>
                                    <th>EDIT</th>
                                    <th>DELETE</th>
                                </tr>
                            </thead>
                            {% for post in post_list %}
                            <tbody>
                                <tr>
                                    <td>{{ post.slug }} </td>
                                    <td>{{ post.created_on }}</td>
                                    <td>{{ post.updated_on }}</td>
                                    <td><a class="btn btn-info" href="#" role="button">Edit</a></td>
                                    <td><a class="btn btn-danger" href="#" role="button">Delete</a></td>
                                </tr>
                            </tbody>
                            {% endfor%}
                        </table>
                    </div>
                </div>
  

Спасибо!

Ответ №1:

Вы должны обработать идентификатор пользователя из URL в свой просмотр по self.kwargs['user_id'] и отфильтровать его сообщение по Post.objects.filter(author=self.kwargs['user_id']) .

Ответ №2:

Да, я решаю это. Просто нужно определить набор запросов.

 class UserProfileView(LoginRequiredMixin, ListView):
 #queryset = Post.objects.all()
 template_name = "profile.html"

 def get_queryset(self):
    user = self.request.user
    return Post.objects.filter(author=user)