Как создать шаблон всех «постов», которые написал «пользователь».
Идея: Клиент нажимает на ссылку «пользователь» на основном сайте, и мы переходим на страницу со всеми »Пользователь сообщений сгенерировал.
Я пробовал очень много вещей в views.py, часть из них работала, поэтому будет добавлено только последнее неработающее решение.:)
Я пытаюсь получить параметр 'user' из URL, например:
blogname / user -> этот URL будет генерировать список всех сообщений 'user'.
urls.py
urlpatterns = [
path('author/<str:username>', AuthorPostIndexView.as_view(),
name='author_post_index'),
]
models.py
class Person(models.Model):
username = models.CharField(max_length = 50, null=True, unique = True)
post = models.ManyToManyField(Post,blank=True,null=True, related_name='authors')
class Post(models.Model):
title = models.CharField(max_length=255, blank=True, null=True)
views.py
# - commented out as non of these worked. Some of them I have broken
playing around with desperation to fix so they are with lack logic,
sketches. Tried those one by one.
class AuthorPostIndexView(ListView):
model = Person
template_name ='authorpostindex.html'
# def get_queryset(self):
# username = self.kwargs['username']
# authorpost = username.post.all()
# return username
# def get_queryset(self):
# if self.request.method == 'GET':
# queryset = Person.objects.all()
# url_username = self.kwargs('username', None)
# if url_username is not None:
# queryset = queryset.filter(person__username=url_username).post.all()
# else:
# queryset = "No queryset"
# def get(self, request, *args, **kwargs):
# author = Person.objects.get(username=username)
# authorpost = author.post.all()
# return authorpost
authorpostindex.html
# Tried different solution depending from queryset, none worked.
Спасибо
пс.Решение:
class AuthorPostIndexView(ListView):
model = Person
template_name ='authorpostindex.html'
context_object_name = 'author_post'
def get_queryset(self):
username = self.kwargs['username']
queryset = Person.objects.get(username=username).post.all()
return queryset
pss.Лучше один ниже.