2010-07-14 55 views
3

我使用的ModelForm Django中在我的數據庫中插入和更新的對象,但是當我嘗試更新,我不能看到對象的主鍵/ ID被更新:我想使用modelform在django中更新對象的主鍵?

我的模型:

class Category(models.Model): 
    name = models.CharField(max_length=20, db_index = True) 

和我的形式:

class CategoryForm(ModelForm): 
    class Meta: 
     model = Category 
     fields = ['name'] 

,在我的模板,我得到:

{% csrf_token %} 
{{ category_form.as_p }} 

在我看來,我做

cat = Category.objects.get(pk = cat_id) 
data['category_form'] = CategoryForm(instance = cat) 

並將數據傳遞到我的模板,這使得形式確定,但對象我即將更新的ID是無處在HTML源代碼。那麼代碼如何才能現在更新什麼對象?

我覺得這很愚蠢,因爲它應該是非常基本的,但我已經遵循了所有的教程,並通過django文檔查看,搜索和搜索這個網站沒有運氣。

在此先感謝。

回答

0

主鍵是實例對象「cat」上的一個名爲「id」的屬性。表單本身,在你的例子中用「cat_id」表示。 Model表單應該注意跟蹤主鍵 - 所有您需要做的就是將結果「request.POST」數據傳回到CategoryForm中,使用is_valid()驗證數據,然後保存它。

form_with_post = CategoryForm(request.POST) 
if form_with_post.is_valid(): 
    form_with_post.save() 
else: 
    ... return the form_with_post through the context to display the errors 
0

ID不需要在HTML中,因爲您在實例化它時已將實例傳遞給表單對象。當你做form.save()時,Django只是更新這個實例。

4

哪裏是cat_id從您的視圖來嗎?我猜你收到它的URL,像這樣:

url(r'categories/(\d+)/edit/', your_view, {}), 

urls.py地方。

def your_view(request, cat_id): 

現在,您可以獲取對象與正確的ID,你在這裏做:現在,在你看來,你可以從相應的視圖函數的參數讀取它

cat = Category.objects.get(pk = cat_id) 

...和實例ModelForm傳遞cat對象如果您想編輯現有對象,或者不傳遞它,如果您想要創建對象的空表單。