2015-10-02 8 views
0

Я новичок в Django, поэтому заблаговременно за ваше терпение. Я пытаюсь использовать inlineformset точно так, как это описано здесь: http://charlesleifer.com/blog/djangos-inlineformsetfactory-and-you/ Проблема в том, что я получаю сообщение об ошибке, как «'componentment_formset', на которое ссылаются перед назначением. Я вижу, как это имеет смысл, в случае представленной, недопустимой формы, но я не знаю, как обращаться к ней, чтобы пользователь возвращался к форме с введенными значениями.Django Inlineformset не работает

Не могли бы вы предложить какие-либо рекомендации по устранению ошибки? Я знаю, что исходный пост датирован. Есть ли более современный подход, который я должен попробовать? Большое спасибо, Carrie

ответ

0

Рассматривая код из опубликованной вами ссылки, я вижу, что переменная componentent_formset определяется при любых обстоятельствах.

Возможно, вы допустили ошибку с отступом, а основной код кода применим к if form.is_valid(), а не к состоянию if request.POST?

EDIT: вот лучше и рабочая версия одного и того же кода

def submit_recipe(request): 
    form = UserSubmittedRecipeForm() 
    ingredient_formset = IngredientFormSet(instance=Recipe()) 

    if request.POST: 
     form = UserSubmittedRecipeForm(request.POST) 
     if form.is_valid(): 
      recipe = form.save(commit=False) 
      ingredient_formset = IngredientFormSet(request.POST, instance=recipe) 
      if ingredient_formset.is_valid(): 
       recipe.save() 
       ingredient_formset.save() 
       return HttpResponseRedirect(reverse('recipes_submit_posted')) 
    return render_to_response("recipes/submit.html", { 
     "form": form, 
     "ingredient_formset": ingredient_formset, 
    }, context_instance=RequestContext(request)) 
+0

Спасибо. Я дважды проверял, а основной код кода в моем коде применим к запросу if.POST (насколько я могу судить). У меня возникли проблемы с получением локальной копии моего кода с удаленного сервера Unix, иначе я бы опубликовал его. Тем не менее, мне кажется, что если запрос является POST, но утверждение «if form.is_valid()» не выполняется, тогда параметр componentent_formset никогда не определяется. Не будет ли код переходить из «if form.is_valid()» (если он не работает) прямо к оператору return? Я думаю, что я могу попробовать переименовать fn, чтобы дважды проверить отступ. – Carrie

+0

@ Carrie проверить код, который я добавил –

+0

Спасибо! Это заставляет меня преодолеть это особое препятствие. :) Теперь пользователь перенаправляется обратно в форму, когда is_valid терпит неудачу, однако поля componentent_formset сбрасываются и теряют ранее введенные данные. (поля «формы» отображают ранее введенные данные, как ожидалось). Причина, по-видимому, связана с моей исходной проблемой: если код не работает на «if form.is_valid()», он перескакивает в оператор return, а параметр componentent_formset не содержит данные из запроса.POST. Мне все равно нужно получить данные POST в набор форм, даже если «форма» недействительна ... – Carrie

Смежные вопросы