首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对象在使用uuid作为主键时未在DetailView中显示。

对象在使用uuid作为主键时未在DetailView中显示。
EN

Stack Overflow用户
提问于 2015-04-29 03:23:56
回答 2查看 2K关注 0票数 1

我使用它生成我的主键,因为我不希望它们是很容易猜到的简单数字(在这个post中找到的):

代码语言:javascript
运行
复制
def make_uuid():
return base64.b64encode(uuid.uuid4().bytes).replace('=', '')

这是我的模型:

代码语言:javascript
运行
复制
class Shipment(models.Model):
    trackid = models.CharField(max_length=36, primary_key=True, default=make_uuid, editable=False)

当我使用urlmyapp.com/ DetailView /trackid_goes_here时,如何使我的视图工作?我已经试过我在这里看到的一切,但我仍然无法使它发挥作用。

另外,是否有比使用uuid更好的获得唯一主键的方法?

谢谢!

更新:

它现在显示了在我的views.py中使用这个模板:

代码语言:javascript
运行
复制
class ShipmentDetailView(DetailView):
    template_name = 'shipments/detail.html'
    context_object_name = 'shipment'

    def get_object(self):
        model = Shipment.objects.get(pk=self.kwargs['trackid'])

和urls.py:

代码语言:javascript
运行
复制
url(r'app/detail/(?P<trackid>[\w\d-]+)/$', coreviews.ShipmentDetailView.as_view(), name='shipment'),

但是模板( {{ shipment.trackid }} )上使用的“标记”不起作用.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-29 04:49:44

模板标记不起作用的原因是需要在get_object()中实际返回实例

代码语言:javascript
运行
复制
def get_object(self):
    return Shipment.objects.get(pk=self.kwargs['trackid'])

如果不返回任何内容,则该方法将返回None (默认返回值);因此模板没有什么可显示的。

票数 0
EN

Stack Overflow用户

发布于 2015-04-29 03:58:14

为什么不直接加密正常的顺序ids呢?对于不知道加密密钥的人来说,ids看起来就像随机的一样。您可以编写一个包装器,在发送到DB的过程中自动解密ID,并在从DB到DB的途中加密它。我认为这是解决问题的好方法,只有你知道加密或解密算法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29933757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档