1

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

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

模型.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)在网址中使用作为参数,如下所示:

网址.py

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

从 url 中完全隐藏这些 id 的最佳方法是什么?

有没有办法让每个学生都有项目 ID?像auto_increment在项目表中添加另一列?

4

1 回答 1

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'),
于 2012-12-25T22:14:24.667 回答