Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 将uuid用作主键时,对象未显示在DetailView中_Django_Uuid_Django Generic Views - Fatal编程技术网

Django 将uuid用作主键时,对象未显示在DetailView中

Django 将uuid用作主键时,对象未显示在DetailView中,django,uuid,django-generic-views,Django,Uuid,Django Generic Views,我用它来生成我的主键,因为我不希望它们是简单的数字,容易猜测(在下面找到): 这是我的模型: class Shipment(models.Model): trackid = models.CharField(max_length=36, primary_key=True, default=make_uuid, editable=False) 当我在这里使用url myapp.com/detail/trackid\u goes\u时,如何使我的DetailView工作?我已经尝试了我在这

我用它来生成我的主键,因为我不希望它们是简单的数字,容易猜测(在下面找到):

这是我的模型:

class Shipment(models.Model):
    trackid = models.CharField(max_length=36, primary_key=True, default=make_uuid, editable=False)
当我在这里使用url myapp.com/detail/trackid\u goes\u时,如何使我的DetailView工作?我已经尝试了我在这里看到的一切,但我仍然无法让它工作

另外,有没有比使用uuid更好的方法来获取唯一主键

谢谢

更新:

现在,它在my views.py中显示了使用以下内容的模板:

class ShipmentDetailView(DetailView):
    template_name = 'shipments/detail.html'
    context_object_name = 'shipment'

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

url(r'app/detail/(?P<trackid>[\w\d-]+)/$', coreviews.ShipmentDetailView.as_view(), name='shipment'),
url(r'app/detail/(?P[\w\d-]+)/$),coreviews.ShipmentDetailView.as_view(),name='shipping'),

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

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

模板标记不起作用的原因是您需要在
get\u object()
中实际返回实例:


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

是的,可能是这样。你有关于我如何做的例子/教程吗?我不知道怎么…废话。。。谢谢,成功了!如果url中没有有效的trackid,我使用
model=get\u object\u或_404(shipping,pk=self.kwargs['trackid'])返回模型
获取404。
url(r'app/detail/(?P<trackid>[\w\d-]+)/$', coreviews.ShipmentDetailView.as_view(), name='shipment'),
def get_object(self):
    return Shipment.objects.get(pk=self.kwargs['trackid'])