使用模型表单集时如何呈现文本框而不是选择框

时间:2010-06-12 18:48:17

标签: django django-forms

当我渲染我的formset时,其中一个字段呈现为选择框,因为它是模型中的外部字段。有没有办法将其更改为文本输入?我想通过使用Ajax自动完成来填充该字段。将小部件添加到modelform不起作用,因为modelformset_factory采用模型而不是模型形式。

修改

我的模特表格

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

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

我在视图中使用它

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

已编辑的模型表格

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

我创建了像这样的表单集

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

问题

我是否必须在html中使用formset?我可以硬编码生成的字段并使用javascript我可以创建新字段并增加“form-TOTAL-FORMS”吗?如果可以的话,我不必担心我的模型形式。

由于

1 个答案:

答案 0 :(得分:5)

modelformset_factory确实采用了一种形式。这是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):

如果这不适合你,请显示一些代码,我会试着看看出了什么问题。

在各种评论后编辑正如您所指出的,当以这种方式使用时,widget参数是错误的。所以解决方案不是使用它 - 它在任何情况下都是最近添加的。而是直接在表单上定义字段:

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