#django #filter #author
Вопрос:
Я создаю блог и пытаюсь дать пользователю возможность просматривать сообщения одного автора. До сих пор я пробовал разные фильтры, чтобы вернуть представление, которое работает. Это самое близкое, что я получил (я думаю), но сайт возвращается пустым. Кто — нибудь знает, чего мне не хватает?
Мой models.py
class Author(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
username = user.name
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
def get_absolute_url(self):
return reverse("author", args=[str(self.id)])
def __str__(self):
return self.user.username
class Post(models.Model):
author = models.ForeignKey(Author, related_name="user_name",on_delete=models.CASCADE)
title = models.CharField(max_length=250)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateField(blank=True,null=True)
Мой view.py
class PostListAuthor(ListView):
model = Post, Author
paginate_by = 5
context_object_name = 'author_posts'
template_name="blog/post_author_list.html"
def get_queryset(self):
return Post.objects.filter(author = Author.username, published_date__lte=timezone.now()).order_by("-published_date")
И мой urls.py имеет ли это:
path("author/<str:pk>",views.PostListAuthor.as_view(),name="author"),
Ответ №1:
Спасибо Ашрафу Исламу. Я путался с get_absolute_url, и ваше решение заставило меня это понять.
Кстати, я получил ошибку, когда попробовал ваше решение, но мне удалось исправить свой код вот так. Теперь работает как заклинание.
urls.py
path("author/<int:pk>/",views.PostListAuthor.as_view(),name="author"),
views.py
def get_queryset(self):
author_id = self.kwargs['pk']
return Post.objects.filter(author = author_id, published_date__lte=timezone.now()).order_by("-published_date")
models.py
def get_absolute_url(self):
return reverse("author", kwargs={'pk':self.pk})
Ответ №2:
path("author/<int:author_id>/",views.PostListAuthor.as_view(),name="author"),
и
def get_queryset(self):
author_id = self.kwargs['author_id']
return Post.objects.filter(author=int(author_id)).order_by("-published_date")