Найти - Пользователи
Полная версия: как передать начальные значения в форму Джанго?
Начало » Django » как передать начальные значения в форму Джанго?
1
gtlhbkkj
Собственно говоря мне нужно или передать начальное значение во второе поле формы ChoiceField или же передать в эту форму переменную (в данном случае {'filter_label':“AF737”}, при помощи которой я мог бы сгенерировать список для ChoiceField.

Делаю вот так во вьюхе
                 ...
                form1 = KSS_Form1(initial={'filter_label':"AF737"})
                context = {'form':form1, **context}
            return render(request, 'af/size/01_kss_size2.html', context)
то есть передаю в форму начальное значение ‘filter_label’:“AF737”

это файл forms.py
 class KSS_Form1(forms.Form):
    # filter_label = forms.CharField(widget=forms.HiddenInput())
    filter_label = forms.CharField()
    d_choice = afc_select_druckstufe.objects.filter(series__valuefg__exact=filter_label)
    list1 = []
    for i in d_choice:
        x = (i.druckstufe.value, i.druckstufe.descr)
        list1.append(x)
    druckstufe = forms.ChoiceField(\
            required=True, \
            label=_("Specify desired presure stage:"), \
            choices = list1,  )

мне его нужно передать как HiddenInput()). Пробовал как CharField() - значение передается и отображается в форме. Пробовал и как HiddenInput()) - сейчас закомментировано, значение нигде не смог увидеть. В обоих случаях значение переменной “AF737” не передается дальше в последующий кверисет
  d_choice = afc_select_druckstufe.objects.filter(series__valuefg__exact=filter_label)
и соответственно дальнейший druckstufe = forms.ChoiceField(… не работает.
А когда в кверисете явно указываю значение переменной, то всё работает.
 d_choice = afc_select_druckstufe.objects.filter(series__valuefg__exact="AF737")
Как правильно сделать?
Спасибо
FishHook
gtlhbkkj
Скажите, пожалуйста, а вы отдаете себе отчет в том, что d_choice это атрибут класса, и поэтому будет получать значение во время импорта модуля, а не создания объекта?
gtlhbkkj
FishHook
gtlhbkkjСкажите, пожалуйста, а вы отдаете себе отчет в том, что d_choice это атрибут класса, и поэтому будет получать значение во время импорта модуля, а не создания объекта?

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

———– views.py ———–
     ...
    ... генерировать список list1
    form1 = KSS_Form1(initial={'d_choice':list1})
    context = {'form':form1, **context}
return render(request, 'af/size/01_kss_size2.html', context)
.

——- forms.py ———–
 class KSS_Form1(forms.Form):
    druckstufe = forms.ChoiceField(\
            required=True, \
            label=_("Specify desired pressure stage:"), \
            choices = d_choice,  )

так я тоже пробовал, не получается.
подозреваю что мой код в форме неправильный и из него надо полностью убрать “choices = d_choice,”

Как должен выглядеть код в форме - описание поля forms.ChoiceField ?
спасибо

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

         form1 = KSS_Form1()
        # этой строки мне не хватало
        form1.fields['druckstufe'].choices = list1
        context = {'form':form1, **context}
    return render(request, 'af/size/01_kss_size2.html', context)
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