#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)