2010-06-15 114 views
10

我有,我用它來更新模型的模型形式。如何只更新Django模型表單中的某些字段?

class Turtle(models.Model): 
    name = models.CharField(max_length=50, blank=False) 
    description = models.TextField(blank=True) 

class TurtleForm(forms.ModelForm): 
    class Meta: 
     model = Turtle 

有時我不需要更新整個模型,但只想更新其中一個字段。所以當我POST表單只有描述的信息。當我這樣做時,模型從不保存,因爲它認爲名稱被刪除,而我的意圖是該名稱不會更改,只能從​​模型中使用。

turtle_form = TurtleForm(request.POST, instance=object) 
    if turtle_form.is_valid(): 
     turtle_form.save() 

有什麼辦法可以做到這一點嗎?謝謝!

回答

9

只能使用特定字段:

class FirstModelForm(forms.ModelForm): 
    class Meta: 
     model = TheModel 
     fields = ('title',) 
    def clean_title(self.... 

http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#controlling-which-fields-are-used-with-fields-and-exclude

當您需要不同的功能時,在不同的視圖中使用不同的ModelForms模型是很常見的。因此,爲使用相同行爲(例如clean_<fieldname>方法等)的模型創建另一種形式:

class SecondModelForm(FirstModelForm): 
    class Meta: 
     model = TheModel 
     fields = ('title', 'description') 
+0

謝謝。這種方法的好處是,我只需要發送填充模板的完整表單,然後根據我發佈的內容選擇不同的表單。 – 2010-06-15 18:46:06

1

如果你不想更新字段,通過元exclude元組從表格中刪除:

class Meta: 
    exclude = ('title',) 
+0

這不完全是我想要做的。我有一個TurtleForm,在頁面上的一個地方,我只想描述,在另一個地方我想要完整的表格。這是可能的還是我需要將它分成兩種不同的形式? – 2010-06-15 18:25:26

相關問題