Как отобразить шаблон на основе набора запросов, выполненного в представлении на основе классов, где один из аргументов для набора запросов происходит из параметра URL - PullRequest
0 голосов
/ 02 июня 2019

Как создать шаблон всех «постов», которые написал «пользователь».

Идея: Клиент нажимает на ссылку «пользователь» на основном сайте, и мы переходим на страницу со всеми »Пользователь сообщений сгенерировал.

Я пробовал очень много вещей в 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.Лучше один ниже.

1 Ответ

3 голосов
/ 02 июня 2019

Ваше мнение должно быть основано на Post. Тогда вы можете использовать всю существующую логику представления, но дополнительно фильтровать по имени пользователя автора.

class AuthorPostIndexView(ListView):
    model = Post
    template_name ='authorpostindex.html'

    def get_queryset(self):
       queryset = super().get_queryset()
       username = self.kwargs['username']
       return queryset.filter(authors__username=username)

(Обратите внимание, что немного странно хранить имя пользователя как CharField только для персонажа. Вероятно, у вас должен быть ForeignKey для модели User.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...