【问题标题】:Getting post created by an user获取用户创建的帖子
【发布时间】:2019-03-25 16:00:46
【问题描述】:

我想显示从用户创建的所有帖子。问题是我不知道在 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'),

【问题讨论】:

  • 你不能把用户 ID 传给你的filter()吗?
  • 您不需要为 kwargs 指定任何内容,只需使用 return Post.objects.filter(author_id=user_id).order_by('created_on')
  • 如何获取 user_id?我不想要当前登录的用户,而是所有创建帖子的用户
  • 你可以像这样获取你的用户ID,self.request.user.pk。它返回用户ID
  • @DimitrisKougioumtzis 正如我上面所说,我想要的不是登录用户,而是创建帖子的每个用户 ID

标签: python django


【解决方案1】:

试试

return Post.objects.filter(author_id=int(self.kwargs['slug'])).order_by('created_on')

如果 slug 是用户 ID,那么应该可以。

如果 slug 是作者的姓名,那么您可以使用 url conf 提供的用户名 slug,但您需要将其与数据库中的作者姓名进行比较。根据 Author 模型,您可以使用以下内容:

return Post.objects.filter(author__name=self.kwargs['slug']).order_by('created_on')

【讨论】:

  • 感谢您的回答。我的 slug 是 author_id 但我收到一个名为 ValueError "invalid literal for int() with base 10" 的错误。我猜它需要一个整数,我传递一个字符串?
  • 哦,好的,我更新了我的答案以将其转换为 int。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多