2014-11-20 53 views
0

我試圖在django 1.7中學習基於類的視圖。使用基於類的視圖處理表單時創建模型

我有兩個模型,第二個模型有第一個外鍵。

class A(models.Model):      
    text = models.CharFeild(max_length=10) 

class B(models.Model): 
    a1 = models.ForeignKey(A) 
    content = models.TextField() 

class BCreateView(CreateView): 
    model = B 
    fields = ['a1', 'content'] 

和形式:

<form action="?" method="post"> 
    <table> 
     {{ form.as_table }} 
    </table> 
    <input type="submit" value="create" /> 
</form> 

當用戶輸入數據到窗體,而不是從第一款我想用文字輸入值下拉列表中,因此用戶只需鍵入文本和實例對於A在爲B處理表單之前創建。我無法弄清楚如何使用基於類的視圖和表單來實現這一點。

+0

可能是我必須重寫Form類中的is_valid方法,但是如何更改小部件中的數據? – 2014-11-21 09:42:28

回答

0

您將需要創建自定義表單,而不是依靠自動生成的表單django爲您提供CreateView。

class MyForm(ModelForm): 

    class Meta: 
    model = B 
    fields = ('a1', 'content) 
    widgets = { 
     'a1': TextInput(), 
    } 

,然後在視圖:

class BCreateView(CreateView): 

    model = B 
    form_class = MyForm 

看到更多細節在這裏:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-fields

+0

即使我創建這樣的表單,我仍然需要自定義驗證方法,因爲應該在保存B之前創建A.這裏a1只需要pk,但我需要傳遞文本。 – 2014-11-21 08:00:05

0

所以最終我繼承BCreateView從FormView控件,並定義窗體類爲forms.Form的後裔和檢查形式在post方法中手動。

相關問題