我想创建一个 user_posts 视图,其中包含与特定用户相关的所有帖子让我们说有/有用户“Natsu”写的博客帖子然后登录用户让我们说“Testuser”将能够看到所有帖子由该用户即用户“Natsu”的所有帖子。blog models.pyclass Post(models.Model): title = models.CharField(max_length=250) slug = models.SlugField(max_length=250, unique_for_date='publish') author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts') body = models.TextField()user models.pyclass Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) image = models.ImageField(upload_to='profile_pic', default='default.jpg') def __str__(self): return f'{ self.user.username } Profile'views.pydef user_posts(request, username): posts = Post.objects.filter(author=username) return render(request, 'blog/user_posts.html', {'posts':posts})user_posts.html{% for post in posts %} <a href="{% url 'user-posts' post.author.username %}" class="mr-2">{{ post.author }}</a> <h2><a href="{% url 'post-detail' post.pk %}">{{ post.title }}</a></h2> {{ post.body|truncatewords:30 }} {% endfor %}urls.py path('user/<str:username>/', views.user_posts, name='user-posts'),但是当我访问那个 url 时它显示错误Field 'id' expected a number but got 'admin'.
3 回答
有只小跳蛙
TA贡献1824条经验 获得超8个赞
author
onPost
将是User
表的主键,它是一个整数(除非从默认值修改)而不是username
. username
您要么需要首先查找,User
要么使用其他一些 Django“魔法”。也许尝试其中之一(我认为他们都在后端做同样的事情):
posts = Post.objects.filter(author=User.object.filter(username=username)[:1])
或者
posts = Post.objects.filter(author__username=username)
(我也没有测试......所以请随意编辑这个答案或评论,如果两者都不起作用)
翻阅古今
TA贡献1780条经验 获得超5个赞
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
当您为 auhor 字段使用外键时,我认为您不能通过 posts = Post.objects.filter(author=username)
. 你能试试filter(author=user.id)
吗?
回首忆惘然
TA贡献1847条经验 获得超11个赞
posts = Post.objects.filter(author=User.object.get(username=username))
或者
posts = Post.objects.filter(author__username=username)
添加回答
举报
0/150
提交
取消