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)、次のように を URL の引数として使用することです。

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をURLから完全に隠すための最良の方法は何ですか?

学生ごとにプロジェクト ID を取得する方法はありますか? auto_incrementProject テーブルに別の列を追加するようなものですか?

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 に答える