我正在尝试检索模型对象,如下面的代码:
(r'^album/(?P<album_id>\w+)/$', 'core.views.album'),
def album(request, album_id):
album = Album.objects.get(pk=album_id)
问题是PK不是整数:
>>> a = Album.objects.all()[0]
>>> a.pk
46L
运行视图时出现的错误:
ValueError at /album/46L/
invalid literal for int() with base 10: '46L'
想法?感谢。
答案 0 :(得分:1)
46L
是一个长整数,而不是字符串,所以你应该把它当作数字而不是urls.py中的单词:
(r'^album/(?P<album_id>\d+)/$', 'core.views.album'),
然后网址/album/46/
最终会调用:
def album(request, album_id):
#album = Album.objects.get(pk=46L)
album = Album.objects.get(pk=album_id)
或者,如果您因某种原因需要在网址中保留“L”,请在使用之前将其投放一段时间:
album = Album.objects.get(pk=long(album_id))
答案 1 :(得分:0)
这个问题与网址/观点无关。每次我执行“runserver”时,我的本地数据存储区都被删除了。因此,使用“shell”时我能够检索的数据未正确同步。
发生这种情况是因为,出于某种奇怪的原因,我在settings.py上评论了这一行(并忘了它):
AUTOLOAD_SITECONF = 'indexes'