2016-05-23 2 views
0

В моем приложении django пользователь может создать объект модели Document путем: 1) ввода данных в форму или 2) копирования существующего документа. Во втором случае я хочу использовать is_valid для подтверждения того, что существующий документ все еще действителен (правила действительности могут быть изменены с момента его создания). У меня это работает так:Использование проверки формы django для inlineformset без POST

doc = original_doc.clone() 
form = DocumentForm(data=doc.__dict__, instance = doc) 
if form.is_valid(): 
    # doc is valid 
else: 
    ... do stuff ... 

Теперь мне нужно сделать то же самое для inlineformset. Каждый документ может иметь один или несколько элементов, и я использую встроенный набор форм для проверки в кросс-поле, который зависит как от поля «Документ», так и от поля «Элемент». У меня есть это:

ItemFormSet = inlineformset_factory(Document, 
       Item, form=ItemForm, formset=CustomItemFormSet) 
item_formset = ItemFormSet(data= XXX, instance = doc, 
       queryset=doc.item_set, doc_form=form) 
if item_formset.is_valid(): 
    # item_formset is valid 
else: 
    ... do stuff... 

Мой вопрос: как я могу получить значение параметра данных (XXX) в ItemFormSet называет? Когда я показываю форму пользователю, я могу использовать request.POST. Без этого мне нужно вручную восстановить поле словаря по полю? Это осложняется из-за данных, которые prepets добавляют к именам полей, например: 'id_item_set-0-field_name'.

ответ

0

Приносим извинения, если мой вопрос не был прост, но я нашел путь вперед и опубликую здесь, если другие считают его полезным.

В принципе, насколько я понял, да, мне нужно вручную восстановить поле словаря, чтобы передать конструктору ItemFormSet, чтобы создать данные формы управления. Учитывая единственную переменную «item», которую я хотел проверить для проверки, я создал словарь, содержащий поля элемента, а затем добавил данные формы управления:

item_dict = item.__dict__ 
item_dict_itemset = {} 
for key, value in item_dict.iteritems(): 
    item_dict_itemset["item_set-0-{}".format(key)] = value 
item_dict_itemset["item_set-INITIAL_FORMS"] = 0 
item_dict_itemset["item_set-MIN_NUM_FORMS"] = 0 
item_dict_itemset["item_set-MAX_NUM_FORMS"] = 1000 
item_dict_itemset["item_set-TOTAL_FORMS"] = 1 

item_formset = ItemFormSet(data-item_dict_itemset, instance=doc, queryset=doc.item_set) 
formset_is_valid = item_formset.is_valid() 
Смежные вопросы