【问题标题】:Is it possible to get an object by its primary key in django-nonrel / Google App Engine?是否可以通过 django-nonrel / Google App Engine 中的主键获取对象?
【发布时间】:2011-09-28 01:39:26
【问题描述】:

我正在尝试检索模型对象,如下面的代码:

(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'

想法?谢谢。

【问题讨论】:

    标签: python django google-app-engine django-nonrel


    【解决方案1】:

    46L是一个长整数,不是字符串,所以在urls.py中你应该把它当作一个数字而不是一个单词:

    (r'^album/(?P<album_id>\d+)/$', 'core.views.album'),
    

    那么 url /album/46/ 将最终调用:

    def album(request, album_id):
        #album = Album.objects.get(pk=46L)
        album = Album.objects.get(pk=album_id)
    

    或者如果您出于某种原因需要在 url 中保留“L”,请在使用前将其转换为 long:

    album = Album.objects.get(pk=long(album_id))
    

    【讨论】:

    • 这是我的第一次尝试,localhost:8081/album/46 的错误是:DoesNotExist at /album/46/ -- 专辑匹配查询不存在。
    • 尝试投射只要没有成功。 :(
    • 你不能转换成 int() 吗?专辑 = Album.objects.get(pk=int(album_id))。这将一直有效,直到您的长整数值变得太大,但在您的示例中这是一个约束吗?
    • 您可能想用您当前的代码更新您的问题
    【解决方案2】:

    问题与网址/视图无关。每次我执行“runserver”时,我的本地数据存储都会被删除。所以我在使用“shell”时能够检索到的数据没有正确同步。

    发生这种情况是因为,出于某种奇怪的原因,我在 settings.py 上评论了这一行(并忘记了它):

    AUTOLOAD_SITECONF = 'indexes'
    

    【讨论】:

      猜你喜欢
      • 2012-06-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多