Как вернуть несколько элементов в функции get_queryset в Django? - PullRequest
0 голосов
/ 29 сентября 2019

Итак, у меня есть веб-приложение, в котором пользователь может вводить свою информацию, и в конце концов я хочу отобразить всю ее информацию, но на данный момент этот код находится прямо здесь

class UserPostListView(ListView):
    model = Post
    template_name = 'mainapp/user_posts.html'
    context_object_name = 'posts'

    def get_queryset(self):
        user = get_object_or_404(User,username=self.kwargs.get('username'))
        first_name = get_object_or_404(User,first_name=self.kwargs.get('first_name'))
        return Post.objects.filter(author=user).order_by('-published_date')

Это выдает мне ошибку,и он говорит, что пользователь не найден.

Я пытался добавить это в конец оператора возврата .order_by('-published_date'),first_name Однако это не сработало.

Это соответствующий файл urls.py, отвечающий засообщения пользователя

path('user/<str:username>', UserPostListView.as_view(), name='user-posts'),

Это модель UserProfileInfo

class UserProfileInfo(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=50,blank=True,null=True)
    last_name = models.CharField(max_length=50,blank=True,null=True)
    description = models.CharField(max_length=150)
    image = ProcessedImageField(upload_to='profile_pics',
                                           processors=[ResizeToFill(150, 150)],
                                           default='default.jpg',
                                           format='JPEG',
                                           options={'quality': 60})
    joined_date = models.DateTimeField(blank=True,null=True,default=timezone.now)
    verified = models.BooleanField( default=False)

    def __str__(self):
        return f'{self.user.username} Profile'

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

А вот соответствующий бит user-posts.html

<div class="sidebar">
        <p class="active" href="#">{{ view.kwargs.username }}</p>
        <button class="commentbtn"><a class="aclass" href="#">Connect with {{ view.kwargs.username }}</a></button>
        <p>{{ view.kwargs.first_name }}</p>
        <p>Lorem</p>
      </div>

Я хочу бытьсмог отобразить имя человека в `` `{{view.kwargs.first_name}}, однако все, что я пробовал, не сработало

Я не ожидал никаких ошибок и это сработало, Однако, это не так.Можно ли использовать 2 get_queryset методов, или я могу что-то сделать в текущем, чтобы достичь своей цели отображения информации о пользователе

Спасибо за любую помощь, которую вы можете оказать:)

1 Ответ

1 голос
/ 29 сентября 2019

Как насчет этого?

def get_queryset(self):
    qs = super().get_queryset() #this is the same as Post.objects.all()
    user = self.request.user
    return qs.objects.filter(author=user).order_by('-published_date')

Теперь вы можете получить доступ к этому запросу, используя object_list в своем шаблоне, но, поскольку вы изменили его имя с помощью context_object_name='posts', используйте posts вместо:

{% for post in posts %}
<h1>{{ post.first_name }}</h1>
...
{% endfor %}

Но похоже, что модель Post не будет иметь столбец first_name?

Возможно, вам лучше использовать и объект request.user здесь:

<h1>{{ request.user.first_name }}</h1>
<h2>{{ request.user.username }}</h2>
...