2013-02-04 94 views
0

我有一個模型FooModel有2場用默認值(default=xxx),並標記爲空白(blank=True),我創建了一個使用FooModel現在ModelFormdjango.forms.ModelForm)我想保存提交後,所以我認爲我有以下代碼:默認字段的值保存一個Django的ModelForm在型號

f = FooForm(request.POST) 

if f.is_valid(): 
    f.save() 

的問題是,在這樣,我從數據庫中獲取違反例外,因爲未在HTML表單中呈現的字段不自動在FooForm實例中繼承,就像我期望的那樣......我如何包含原始模型中不應該顯示的字段給用戶? (我不希望它們渲染爲隱藏字段!)

到目前爲止,我試過2點的方法,無論是失敗...

  1. 在FooForm構造(f = FooForm(request.POST, instance=FooModel())

  2. 指定實例

    創建FooModel的實例,並手動分配自動生成的值,以在窗體的數據:

    i = FooModel() 
    
    f.data.fieldA = i.fieldA 
    
    f.data.fieldB = i.fieldB 
    

UPDATE:

通過更準確地閱讀Django文檔,我用這種方式解決:

if f.is_valid(): 
    formModel = f.save(commit=False) 
    foo = FooModel() 
    formModel.fieldA = foo.fieldA 
    formModel.fieldB = foo.fieldB 
    formModel.save() 

但是,說實話,我不太滿意......我想抽象出除了這些領域的......也許通過使用定製的裝飾......是這樣的:

f = MissingFieldsDecorator(FooForm(request.POST)) 
f.save() 
+1

的辦法。你累了這裏指定的方法 [鏈接](https://docs.djangoproject.com /en/1.4/topics/forms/modelforms/#using-a-subset-of-fields-on-the-form) – akotian

+0

你能否發表你的評論作爲答案? :) – daveoncode

回答

0

我怎麼能包括從原來的模型字段哪些不應該顯示給用戶?

回答你的問題,這部分

class FooForm(ModelForm): 
    class Meta: 
     model = FooModel 
     exclude = ('not_displayed_field',) 
+1

這將排除該字段,隱藏它!=「包含來自原始模型的字段」。使用小部件= { 'not_displayed_field':forms.HiddenInput() } – mgPePe

相關問題