在views.py中的show_reviews方法中,我正在查询用户名的所有评论(从网址传递)。
def show_reviews(request, username):
latest_reviews = UserReview.objects.filter(name=username)
context1 = {'latest_reviews': latest_reviews}
return render(request, 'reviews.html', context1)
但每当我转到附加到此视图的网址时,我都会收到以下错误:
ValueError at /reviews/terminator/
invalid literal for int() with base 10: 'terminator'
如果我将查询更改为UserReview.objects.all(),页面加载时没有错误,我可以看到所有的评论,所以我猜测我用filter(name = username)犯了一个简单的错误?我在这里做错了什么?
答案 0 :(得分:1)
没有看到你的urls.py
很难肯定,但我猜你的网址模式有:
url(r'^reviews/([\d]+)$', views.show_reviews),
什么时候需要:
url(r'^reviews/([\w]+)$', views.show_reviews),
或
url(r'^reviews/(.+)$', views.show_reviews),
当它应该是一个字符串时,或UserReview
对象的name
字段是一个int。也许发布更多的代码?
答案 1 :(得分:0)
我假设name
是外键字段,而username
是来自URL模式的字符串,django正试图将其转换为键(整数)。不要直接将用户名与外键进行比较,而是使用__
关注该外键并检查其中的用户名。
例如,如果name
是Django内置用户模型(django.contrib.auth.models.User)的外键,那么你可以这样做:
latest_reviews = UserReview.objects.filter(name__username=username)