字段“id”需要一个数字但得到了“natsu”django

我想创建一个 user_posts 视图,其中包含与特定用户相关的所有帖子让我们说有/有用户“Natsu”写的博客帖子然后登录用户让我们说“Testuser”将能够看到所有帖子由该用户即用户“Natsu”的所有帖子。


blog models.py


class 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.py


class 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.py


def 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'.


慕码人8056858
浏览 147回答 3
3回答

有只小跳蛙

authoronPost将是User表的主键,它是一个整数(除非从默认值修改)而不是username.&nbsp;username您要么需要首先查找,User要么使用其他一些 Django“魔法”。也许尝试其中之一(我认为他们都在后端做同样的事情):posts&nbsp;=&nbsp;Post.objects.filter(author=User.object.filter(username=username)[:1])或者posts&nbsp;=&nbsp;Post.objects.filter(author__username=username)(我也没有测试......所以请随意编辑这个答案或评论,如果两者都不起作用)

翻阅古今

author&nbsp;=&nbsp;models.ForeignKey(User,&nbsp;on_delete=models.CASCADE,&nbsp;related_name='blog_posts')当您为 auhor 字段使用外键时,我认为您不能通过&nbsp;posts = Post.objects.filter(author=username).&nbsp;你能试试filter(author=user.id)吗?

回首忆惘然

posts&nbsp;=&nbsp;Post.objects.filter(author=User.object.get(username=username))或者&nbsp;&nbsp;posts&nbsp;=&nbsp;Post.objects.filter(author__username=username)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python