隐藏主键或ID

时间:2012-12-25 08:50:40

标签: django primary-key django-urls identifier

目前,在添加,编辑或删除对象时,我正在使用URL中对象的id(pk),这当然会将该特定对象的全局主键ID公开给用户。我想以某种方式想要在使用POST时隐藏表单中的url和/或隐藏字段中的全局id。

为了让它更清楚,让我用一个例子解释一下。所以说我有以下型号。

Models.py

class Profile(User)
    # Some fields here


class Student(Profile)
    # some fields here


class Teacher(Profile)
    # Some fields here


class Project(models.Model)
    student = models.ForeignKey(Student)
    # some more fields here.

根据上述模型,我想要编辑或删除现有的Project实例。我目前所做的是在网址中使用id(pk)作为参数,如下所示:

Urls.py

url(r'^project/(?P<id>\d+)/edit/$', 'app.views.edit_project'),
url(r'^project/(?P<id>\d+)/delete/$', 'app.views.delete_project'),

从网址完全隐藏这些ID的最佳方法是什么?

我们有没有办法让每位学生拥有Project Id?比如在Project表中添加另一个auto_increment列?

1 个答案:

答案 0 :(得分:3)

安东尼提出的SlugField()选项是个好主意。在字段上放置一个唯一约束(模型定义中为unique=True)。然后按照以下方式编写urls.py规则:

url(r'^project/(?P<slug>[A-Za-z0-9_\-]+)/edit/$', 'app.views.edit_project'),
url(r'^project/(?P<slug>[A-Za-z0-9_\-]+)/delete/$', 'app.views.delete_project'),