为什么在运行查询时会得到'int()的无效文字?

时间:2014-11-17 01:31:09

标签: django django-queryset

在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)犯了一个简单的错误?我在这里做错了什么?

2 个答案:

答案 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)