我正在使用它来生成我的主键,因为我不希望它们是简单易于猜测的数字(在post中找到它):
def make_uuid():
return base64.b64encode(uuid.uuid4().bytes).replace('=', '')
这是我的模特:
class Shipment(models.Model):
trackid = models.CharField(max_length=36, primary_key=True, default=make_uuid, editable=False)
当我使用url myapp.com/detail/trackid_goes_here时,如何使我的DetailView视图工作?我已经尝试过我在这里看到的一切,但仍然无法使其发挥作用。
另外,有没有比使用uuid更好的获取唯一主键的方法?
谢谢!
更新
它现在在我的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'])
和urls.py:
url(r'app/detail/(?P<trackid>[\w\d-]+)/$', coreviews.ShipmentDetailView.as_view(), name='shipment'),
但模板上使用的“标签”({{shipment.trackid}})无效......
答案 0 :(得分:0)
为什么不加密正常的顺序ID呢?对于不知道加密密钥的人来说,ID似乎是随机的。您可以编写一个包装器,在到DB的路上自动解密ID,并在从DB上的路上对其进行加密。我认为这是解决问题的好方法,只有你知道加密或解密算法。
答案 1 :(得分:0)
模板标记无效的原因是您需要在get_object()
中实际返回实例:
def get_object(self):
return Shipment.objects.get(pk=self.kwargs['trackid'])
如果您没有返回任何内容,则该方法返回None
(默认返回值);因此,您的模板无需显示。