title: Hide primary keys or ids from being exposed
body: <p>Currently while adding, editing or deleting a object i am using the id (pk) of the object in the urls which of course exposes the global primary key id of that particular object to the users. I somehow want to hide those global id's from the urls and/or from the hidden fields within a form while using POST.</p>
  <p>Just to make it a little more clear let me explain this with an example. So say i have the following models.</p>
  <h1>Models.py</h1>
  <pre><code>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.
  </code></pre>
  <p>according to the above models, say i want to either edit or delete an existing <code>Project</code> instance. what I currently do is use the <code>id(pk)</code> as an argument in the urls as follows:</p>
  <h1>Urls.py</h1>
  <pre><code>url(r'^project/(?P&lt;id&gt;\d+)/edit/$', 'app.views.edit_project'),
  url(r'^project/(?P&lt;id&gt;\d+)/delete/$', 'app.views.delete_project'),
  </code></pre>
  <p>what would be the best approach to either completely hide these id's from the url?</p>
  <p>is there a way we could have Project Id's per student ? something like adding another <code>auto_increment</code> column to the Project table ?</p>