#python #django
#python #django
Вопрос:
Я хочу отобразить все сообщения, созданные пользователем. проблема в том, что я не знаю, что писать в kwargs, поскольку я использую slug для отображения пользовательских URL.
Модели
class Post(models.Model):
body_text=models.TextField()
title=models.CharField(max_length=50)
created_on=models.DateField(auto_now_add=True)
slug=models.SlugField(max_length=50,unique=True)
author=models.ForeignKey(
get_user_model(),
on_delete=models.CASCADE,
)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post_detail', kwargs={'slug': self.slug})
def save(self, *args, **kwargs):
self.slug = slugify(self.title, allow_unicode=True)
return super(Post, self).save(*args, **kwargs)
views.py
class ProfilPostView(ListView):
model=Post
template_name='profile.html'
def get_queryset(self):
return Post.objects.filter(author=self.kwargs['']).order_by('created_on')
#return Post.objects.filter(author=self.request.user).order_by('created_on')
urls.py
path('post/<slug:slug>/profile', ProfilPostView.as_view(), name='profile'),
Комментарии:
1. Разве вы не можете просто передать идентификатор пользователя в свой
filter()
?2. Вам не нужно ничего указывать для kwargs, просто используйте
return Post.objects.filter(author_id=user_id).order_by('created_on')
3. как мне получить идентификатор пользователя? мне нужен не пользователь, который в данный момент вошел в систему, а все пользователи, создавшие сообщение
4. вы можете получить свой идентификатор пользователя следующим образом, self.request.user.pk . Он возвращает идентификатор пользователя
5. @DimitrisKougioumtzis как я сказал выше, мне нужен не зарегистрированный пользователь, а идентификатор каждого пользователя, который создал сообщение
Ответ №1:
Попробуйте
return Post.objects.filter(author_id=int(self.kwargs['slug'])).order_by('created_on')
Если slug является идентификатором пользователя, то это должно сработать.
Если вместо имени пользователя используется имя автора, вы можете использовать имя пользователя slug, указанное в url conf, но вам нужно сравнить его с именами авторов в базе данных. В зависимости от модели автора вы могли бы использовать что-то вроде:
return Post.objects.filter(author__name=self.kwargs['slug']).order_by('created_on')
Комментарии:
1. спасибо за ваш ответ. Мой идентификатор — это author_id, но я получаю ошибку под названием ValueError «недопустимый литерал для int () с основанием 10» . Я предполагаю, что он ожидает целое число, и я передаю строку?
2. О, хорошо, я обновил свой ответ, чтобы преобразовать его в int.