Как отобразить текстовое поле вместо поля выбора при использовании набора форм модели - PullRequest
1 голос
/ 12 июня 2010

Когда я отображаю свой набор форм, одно из полей отображается как поле выбора, потому что это внешнее поле в модели. Есть ли способ изменить это на ввод текста? Я хочу заполнить это поле с помощью автоматического заполнения Ajax. Добавление виджета к форме модели не работает, потому что modelformset_factory принимает модель, а не форму модели.

EDIT

Форма моей модели

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? Могу ли я просто жестко кодировать поля, которые генерируются, и с помощью JavaScript я могу создавать новые поля и увеличивать "form-TOTAL-FORMS"? Если я могу, мне не нужно беспокоиться о моей модельной форме.

Спасибо

1 Ответ

5 голосов
/ 13 июня 2010

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):

Если это не работает для вас, покажите некоторый код, и я попробую и посмотрю, что происходит не так.* Редактировать после различных комментариев Как вы указали, аргумент виджета глючит при использовании таким образом.Так что решение не в том, чтобы его использовать - это очень недавнее дополнение в любом случае.Вместо этого определите поле непосредственно в форме:

class RecipeIngredientForm(forms.ModelForm):
    ingredient = forms.ModelChoiceField(widget=forms.TextInput))
    class Meta:
        model = RecipeIngredient
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...