form.data.get的结果为None

时间:2014-03-03 14:01:44

标签: django django-forms django-class-based-views

forms.py:

class DealForm(BaseForm, ModelForm):
    class Meta:
        model = Deal

    values = django_forms.ChoiceField(widget = django_forms.Select, required=False, choices=[(1, "111"), (2, "222"), (3, "333")])

views.py:

class CreateDealView(DealBaseView, CreateView):
    template_name = 'deal.html'
    model = Deal
    form_class = DealForm

    def get_context_data(self, **kwargs):
        ret = super(CreateDealView, self).get_context_data(**kwargs)
        form = kwargs.get('form')
        print form.data.get('values') # prints "None"

如何将表单中的字段数据传递给视图?

编辑: 我重新提出了这个问题。 我需要将预先设置的选项从表单传递到视图然后再传递给模板。怎么做?

2 个答案:

答案 0 :(得分:0)

views.py:

deal.setdefault('values', form.fields['values'].choices or '')

模板:

    <select id="val" name="value_list">
    {% for id, val in deal.values %}
        <option value="{{id}}"
        {% if val == current_val %}selected="selected"{% endif %}>
            {{val}}
        </option>
    {% endfor %}

答案 1 :(得分:0)

如果您指的是与表单中定义的选项不同的选项,请在实例化表单后在字段上设置选项:

class CreateDealView(DealBaseView, CreateView):
    template_name = 'deal.html'
    model = Deal
    form_class = DealForm

    def get_form(self, form_class):
        form = super(CreateDealView, self).get_form(form_class)
        choices = [('some', 1), ('other', 2), ('choices', 3)]
        form.fields['values'].choices = choices
        return form

但是,如果你的意思是你的领域的原始选择,你不需要做任何事情,它们已经在你的形式。