Найти - Пользователи
Полная версия: FormSet и initial data для extra форм??
Начало » Django » FormSet и initial data для extra форм??
1 2
patriotyk
Ferroman
Послушай “чувак”, следи за разговором.
Повторяю вопрос ещё раз, для медленных: Ты пробовал сделать так, как в моём посте? Твой код, от моего вообще ничем не отличается.
Конечно что пробовал.
Ferroman
Странно. Можешь показать код, как пробовал?
Какая версия джанги?
patriotyk
Ferroman
Странно. Можешь показать код, как пробовал?
Какая версия джанги?
Короче забей, я вижу ты не понимаешь что мне надо, а мне впадло третий раз обяснять.
Ferroman
Нет, давай всё-таки разберёмся.
Твой вопрос:
все екстра форми в FormSet всегда пустые, а мне нужно чтобы некоторые поля в екстра форме были заполнены начальными значениями
Ответ есть в документации, я его тебе дал.

Ты же пишешь явный бред сивой кобылы, но с умным видом :
количество словарей в mx_data определяет количество форм в формсете, а екстра форм будет всегда то количситво которое указано в extra параметре и они будут пустые
После замечания, начинаешь нести какой-то маразм о
В дукументации про такую возможность не написано это значит что прямими методами оно не реализовуется, и пишу может ктонибудь знает какие нибуть трики как такое сделать.
Уже после того как я дал линк на документацию где написано как это сделать.

Вот твой код:
 MxFormSet = formset_factory(MXForm, extra=extra, can_delete=True)
c.mx_formset = MxFormSet(initial=mx_data)
Ты говоришь что добавление словарей для эктра-форм в initial, как я и ответил во втором посте, не добавляет начальные значения экстра формам.
Ты же утверждаешь что пробовал так делать.
Значит ты либо лжёшь и не пробовал, либо не достаточно описал задачу.
Я же попробовал:
>>> from django import forms
>>> from django.forms.formsets import formset_factory
>>> class MXForm(forms.Form):
... MX = forms.CharField()
... name = forms.CharField()
>>> extra = 6
>>> MxFormSet = formset_factory(MXForm, extra=extra)
>>> # делаем инициирующие словари
>>> mx_data = MxFormSet(initial=[{'name':'main record', 'MX':'main mx'},{'name':'extra initial', 'MX':''}, {'name':'extra init 2', 'MX':'extra form init 2'}])
>>> mx_formset = MxFormSet(initial=mx_data)
>>> for form in mx_formset.forms:
... print form.as_table()
...
<tr><th><label for="id_form-0-MX">MX:</label></th><td><input type="text" name="form-0-MX" value="main mx" id="id_form-0-MX" /></td></tr>
<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" value="main record" id="id_form-0-name" /></td></tr>
<tr><th><label for="id_form-1-MX">MX:</label></th><td><input type="text" name="form-1-MX" value="" id="id_form-1-MX" /></td></tr>
<tr><th><label for="id_form-1-name">Name:</label></th><td><input type="text" name="form-1-name" value="extra initial" id="id_form-1-name" /></td></tr>
<tr><th><label for="id_form-2-MX">MX:</label></th><td><input type="text" name="form-2-MX" value="extra form init 2" id="id_form-2-MX" /></td></tr>
<tr><th><label for="id_form-2-name">Name:</label></th><td><input type="text" name="form-2-name" value="extra init 2" id="id_form-2-name" /></td></tr>
<tr><th><label for="id_form-3-MX">MX:</label></th><td><input type="text" name="form-3-MX" id="id_form-3-MX" /></td></tr>
<tr><th><label for="id_form-3-name">Name:</label></th><td><input type="text" name="form-3-name" id="id_form-3-name" /></td></tr>
<tr><th><label for="id_form-4-MX">MX:</label></th><td><input type="text" name="form-4-MX" id="id_form-4-MX" /></td></tr>
<tr><th><label for="id_form-4-name">Name:</label></th><td><input type="text" name="form-4-name" id="id_form-4-name" /></td></tr>
<tr><th><label for="id_form-5-MX">MX:</label></th><td><input type="text" name="form-5-MX" id="id_form-5-MX" /></td></tr>
<tr><th><label for="id_form-5-name">Name:</label></th><td><input type="text" name="form-5-name" id="id_form-5-name" /></td></tr>
<tr><th><label for="id_form-6-MX">MX:</label></th><td><input type="text" name="form-6-MX" id="id_form-6-MX" /></td></tr>
<tr><th><label for="id_form-6-name">Name:</label></th><td><input type="text" name="form-6-name" id="id_form-6-name" /></td></tr>
<tr><th><label for="id_form-7-MX">MX:</label></th><td><input type="text" name="form-7-MX" id="id_form-7-MX" /></td></tr>
<tr><th><label for="id_form-7-name">Name:</label></th><td><input type="text" name="form-7-name" id="id_form-7-name" /></td></tr>
<tr><th><label for="id_form-8-MX">MX:</label></th><td><input type="text" name="form-8-MX" id="id_form-8-MX" /></td></tr>
<tr><th><label for="id_form-8-name">Name:</label></th><td><input type="text" name="form-8-name" id="id_form-8-name" /></td></tr>
Результат наочно показывает что “некоторые поля в екстра форме были заполнены начальными значениями”. Код аналогичен тому, что я написал раньше.

И так, ты лгал и ничего не пробовал? Если нет, то что же ты понимал под :
все екстра форми в FormSet всегда пустые, а мне нужно чтобы некоторые поля в екстра форме были заполнены начальными значениями
patriotyk
Ferroman
Нет, давай всё-таки разберёмся.
Твой вопрос:
все екстра форми в FormSet всегда пустые, а мне нужно чтобы некоторые поля в екстра форме были заполнены начальными значениями
Ответ есть в документации, я его тебе дал.

Ты же пишешь явный бред сивой кобылы, но с умным видом :
количество словарей в mx_data определяет количество форм в формсете, а екстра форм будет всегда то количситво которое указано в extra параметре и они будут пустые
После замечания, начинаешь нести какой-то маразм о
В дукументации про такую возможность не написано это значит что прямими методами оно не реализовуется, и пишу может ктонибудь знает какие нибуть трики как такое сделать.
Уже после того как я дал линк на документацию где написано как это сделать.

Вот твой код:
 MxFormSet = formset_factory(MXForm, extra=extra, can_delete=True)
c.mx_formset = MxFormSet(initial=mx_data)
Ты говоришь что добавление словарей для эктра-форм в initial, как я и ответил во втором посте, не добавляет начальные значения экстра формам.
Ты же утверждаешь что пробовал так делать.
Значит ты либо лжёшь и не пробовал, либо не достаточно описал задачу.
Я же попробовал:
>>> from django import forms
>>> from django.forms.formsets import formset_factory
>>> class MXForm(forms.Form):
... MX = forms.CharField()
... name = forms.CharField()
>>> extra = 6
>>> MxFormSet = formset_factory(MXForm, extra=extra)
>>> # делаем инициирующие словари
>>> mx_data = MxFormSet(initial=[{'name':'main record', 'MX':'main mx'},{'name':'extra initial', 'MX':''}, {'name':'extra init 2', 'MX':'extra form init 2'}])
>>> mx_formset = MxFormSet(initial=mx_data)
>>> for form in mx_formset.forms:
... print form.as_table()
...
<tr><th><label for="id_form-0-MX">MX:</label></th><td><input type="text" name="form-0-MX" value="main mx" id="id_form-0-MX" /></td></tr>
<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" value="main record" id="id_form-0-name" /></td></tr>
<tr><th><label for="id_form-1-MX">MX:</label></th><td><input type="text" name="form-1-MX" value="" id="id_form-1-MX" /></td></tr>
<tr><th><label for="id_form-1-name">Name:</label></th><td><input type="text" name="form-1-name" value="extra initial" id="id_form-1-name" /></td></tr>
<tr><th><label for="id_form-2-MX">MX:</label></th><td><input type="text" name="form-2-MX" value="extra form init 2" id="id_form-2-MX" /></td></tr>
<tr><th><label for="id_form-2-name">Name:</label></th><td><input type="text" name="form-2-name" value="extra init 2" id="id_form-2-name" /></td></tr>
<tr><th><label for="id_form-3-MX">MX:</label></th><td><input type="text" name="form-3-MX" id="id_form-3-MX" /></td></tr>
<tr><th><label for="id_form-3-name">Name:</label></th><td><input type="text" name="form-3-name" id="id_form-3-name" /></td></tr>
<tr><th><label for="id_form-4-MX">MX:</label></th><td><input type="text" name="form-4-MX" id="id_form-4-MX" /></td></tr>
<tr><th><label for="id_form-4-name">Name:</label></th><td><input type="text" name="form-4-name" id="id_form-4-name" /></td></tr>
<tr><th><label for="id_form-5-MX">MX:</label></th><td><input type="text" name="form-5-MX" id="id_form-5-MX" /></td></tr>
<tr><th><label for="id_form-5-name">Name:</label></th><td><input type="text" name="form-5-name" id="id_form-5-name" /></td></tr>
<tr><th><label for="id_form-6-MX">MX:</label></th><td><input type="text" name="form-6-MX" id="id_form-6-MX" /></td></tr>
<tr><th><label for="id_form-6-name">Name:</label></th><td><input type="text" name="form-6-name" id="id_form-6-name" /></td></tr>
<tr><th><label for="id_form-7-MX">MX:</label></th><td><input type="text" name="form-7-MX" id="id_form-7-MX" /></td></tr>
<tr><th><label for="id_form-7-name">Name:</label></th><td><input type="text" name="form-7-name" id="id_form-7-name" /></td></tr>
<tr><th><label for="id_form-8-MX">MX:</label></th><td><input type="text" name="form-8-MX" id="id_form-8-MX" /></td></tr>
<tr><th><label for="id_form-8-name">Name:</label></th><td><input type="text" name="form-8-name" id="id_form-8-name" /></td></tr>
Результат наочно показывает что “некоторые поля в екстра форме были заполнены начальными значениями”. Код аналогичен тому, что я написал раньше.

И так, ты лгал и ничего не пробовал? Если нет, то что же ты понимал под :
все екстра форми в FormSet всегда пустые, а мне нужно чтобы некоторые поля в екстра форме были заполнены начальными значениями
Не понимаю что ты хтел этим доказать, так как твой код какраз и доказывает то что я и казал.
Смотри ты написал extra=6 и добавил 3 словаря в initial. Вот и видим 6 екстра пустих форм. И 3 основные записи. Пустих же екстра форм не стало меньше шести, их есть в точности 6. Хочу наголосить что екстра формы это не просто дополнительниые формы, а это отдельній тип которий к примеру не валидируется в is_valid() если в них ничего не было введено, даже если поля форми есть обязательными, и есть ище другие нюансы.

И не надо писать что я бред пишу. Я писал что в документации нет ни слова как заполнить екстра формы дефолтными значениями.

Я даже код джангового формсета пересмотрел и не увидил такой возможности.
Ferroman
Действительно, я не заметил, что появилось не 6 дополнительных полей, а больше. Извиняюсь за претензию, но проблема действительно была плохо описана.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB