2010-06-12 35 views
1

當我渲染我的窗體集時,其中一個字段渲染爲選擇框,因爲它是模型中的外部字段。有沒有辦法將其更改爲文本輸入?我想通過使用Ajax auto complete填充該字段。將模型添加到模型不起作用,因爲modelformset_factory使用模型而不是模型表單。如何在使用模型窗體集時渲染文本框而不是選擇框

編輯

我的雛型

class RecipeIngredientForm(ModelForm): 
    class Meta: 
     model = RecipeIngredient 

     widgets = { 'ingredient' : TextInput(), } 

我用它在我看來

RecipeIngredientFormSet = modelformset_factory(RecipeIngredient, form=RecipeIngredientForm) 
    objRecipeIngredients = RecipeIngredientFormSet() 

EDITED雛型

class RecipeIngredientForm(ModelForm): 
    ingredient2 = TextInput() 
    class Meta: 
     model = RecipeIngredient 

我創建的形式設置這樣

RecipeIngredientFormSet = modelformset_factory(RecipeIngredient, form=RecipeIngredientForm) 
    objRecipeIngredients = RecipeIngredientFormSet() 

問題

我一定要使用該formset的HTML?我可以只編寫生成的字段,並使用javascript我可以創建新的字段並增加「form-total-form」?如果我可以,那麼我不必擔心我的模型形式。

謝謝

+0

看起來像這是一個錯誤http://code.djangoproject.com/ticket/13095。 我該如何應用該補丁? – iJK 2010-06-12 21:14:34

回答

5

modelformset_factory does not take a form。下面是從django.forms.models函數簽名:

def modelformset_factory(
      model, form=ModelForm, formfield_callback=lambda f: f.formfield(), 
      formset=BaseModelFormSet, 
      extra=1, can_delete=False, can_order=False, 
      max_num=0, fields=None, exclude=None): 

如果這不是爲你工作,表現出一定的代碼,我會嘗試,看看什麼錯誤。

在各種意見後編輯正如您所指出的,當以這種方式使用時,小部件參數是錯誤的。所以解決方案是不要使用它 - 無論如何這是一個非常新的增加。相反,直接在窗體上定義字段:

class RecipeIngredientForm(forms.ModelForm): 
    ingredient = forms.ModelChoiceField(widget=forms.TextInput)) 
    class Meta: 
     model = RecipeIngredient 
+0

我更新了我的代碼,但是我收到一個錯誤,它顯示「()獲得了一個意外的關鍵字參數'widget'」。我只將兩個參數傳遞給函數。 – iJK 2010-06-12 20:39:03

+0

嗨丹尼爾,謝謝你的回覆。我無法渲染該字段,我仍然看到模型表單字段。 – iJK 2010-06-13 00:11:41

相關問題