如何在Django中通过uuid'检索对象

时间:2016-02-27 20:54:44

标签: python django

我想通过它的pk字段访问我的模型,当它是一个uuid表示。我收到404 on this address http://localhost:8002/box/6d99a390-5a8a-41e6-8fbf-84a2bb7a8e0f`的年龄错误 我有这个配置

def get_box(request, pk):
    """ 
    Retrieve the object 
    """
    box = get_object_or_404(Box, pk=pk)
    return render(
            request,
            'boxes/box.html',
            {'box':box}
            )

和我的models.py

@python_2_unicode_compatible
class Box(models.Model):
    """
    Box model
    """
    def __str__(self):
        return self.title
    id = models.UUIDField(primary_key=True,
                              default=uuid.uuid4, editable=False)     
    title = models.CharField(max_length=40, blank=True, null=True)

和我的urls.py

...
url(r'^box/(?P<pk>[0-9A-Za-z]+)/$', views.get_box, name='box'),
...

1 个答案:

答案 0 :(得分:4)

问题不是查询,而是URL。你的正则表达式只匹配字母数字字符,但uuid也包含破折号;你应该在模式中包括那些:

r'^box/(?P<pk>[0-9A-Fa-f-]+)/$'

(另请注意,字符只能是f到f,而不是a到z。)