目前,在添加,编辑或删除对象时,我正在使用URL中对象的id(pk),这当然会将该特定对象的全局主键ID公开给用户。我想以某种方式想要在使用POST时隐藏表单中的url和/或隐藏字段中的全局id。
为了让它更清楚,让我用一个例子解释一下。所以说我有以下型号。
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)
作为参数,如下所示:
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
列?
答案 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'),