2013-11-03 48 views
4

刪除對象我有類人Django的 - 如何使用視圖

class People (models.Model): 
    first_name = models.CharField(max_length = 50) 
    last_name = models.CharField(max_length = 50) 
    email = models.EmailField(blank = True) 
    grade = models.CharField(max_length = 2) 

    def __unicode__(self): 
     return '%s %s' % (self.first_name, self.last_name) 

我刪除視圖

def delete(request): 
    query = People.objects.get(pk=id) 
    query.delete() 
    return HttpResponse("Deleted!") 

和我有HTML模板代碼

{% for person in people_list %} 
<TR ALIGN="CENTER"> 
     <td>{{ person.first_name }}</td> 
    <td>{{ person.last_name }}</td> 
    <td>{{ person.email }}</td> 
    <td>{{ person.grade }}</td> 
    <td><form action="/modify.html"> 
     <input type="submit" value="Modify"> 
     </form></td> 
    <td><form action="/delete.html"> 
     <input type="submit" value="Delete"> 
     </form></td> 
</TR> 
     {% endfor %} 

如何從模板中獲取person.id並將其放入刪除視圖中,並刪除與person.id對應的對象。

回答

3

你需要有你的delete函數(順便說一句,將其命名爲delete_person)參數pk。

def delete_person(request, pk): 
    ... 
    ... 
在URLconf

然後,做這樣的事情

url(r'^delete_person/(?P<pk>\d+)/$', 'delete_person', name='delete_person') 

,然後生成像在模板中的網址,以便

{% url 'delete-person' person.id %} 

PS - 無需有你的網址結束.html

PPS - 在視圖中做一些驗證是個好主意o確保用戶有權刪除該人員。

+0

你是我的男人!我們的答案有差異,但方式幾乎完全相同。 :) – scriptmonster

+0

謝謝你的提示。 –

1

我想你可以使用一個鏈接,而不是形式:

替換該行

<td> 
    <form action="/delete.html"> 
    <input type="submit" value="Delete"> 
    </form> 
</td> 

與此

<td><a href="/delete/{{ person.id }}">Delete</a></td> 

在urls.py你應該添加以下行有關您的網址:

url(r'^delete/(?P<person_pk>.*)$', 'person.views.delete' name='delete-person'), 

然後改變你的看法:

def delete(request, person_pk): 
    query = People.objects.get(pk=person_pk) 
    query.delete() 
    return HttpResponse("Deleted!") 
+0

這是一個非常糟糕的主意。不應使用GET調用修改數據庫的操作。 –

+0

我想做一個簡單的項目應用程序 –

+1

@DanielRoseman我不這麼認爲,如果你在你的視圖中進行了必要的控制,它不管是獲取,發佈,刪除或其他。由於我可以模擬所有類型的請求,因此所有http請求在同一級別都是脆弱的。 – scriptmonster