如何通过表单传递值以进行查看

时间:2019-06-11 14:14:05

标签: django django-forms django-views

美好的一天。 挑战是: 创建一个表单,该表单将根据用户输入更改模型字段的参数。

我的逻辑是这样。我试图创建一个用于输入更改的表单: 在列表中,我记录了该模型的所有ID和字段名称;

class RefDataForm(forms.Form):
        NODE_ID_LIST=[('YE102_4G','YE102_4G'),('AG001_4G','AG001_4G')]
        ANRFUNC_PARAM_LIST=[('zzztemporary7','zzztemporary7'),('zzztemporary2','zzztemporary2')]

        change_id                       =       forms.CharField(label='Node ID for Change', widget=forms.Select(choices=NODE_ID_LIST))
        change_param_name               =       forms.CharField(label='Parameter name for Change', widget=forms.Select(choices=ANRFUNC_PARAM_LIST))
        value                           =       forms.CharField(label='Value')

接下来在view.py中,我试图创建一个应该接受更改的 .update 命令。

def ref_test(request, template_name ='ref_test.html'):

   if request.method == 'POST':
        test=RefDataForm(request.POST)

        if test.is_valid():
            change_id          = request.POST['change_id']
            change_param_name  = request.POST['change_param_name']
            change_value       = request.POST['value']


            update_form        = Ran4GRfAnrfunction.objects.filter(pk__in=change_id).update(change_param_name=change_value)
    else:
        test=RefDataForm()

    return render(request, template_name, {'test':test})

我的html是:

<form  method="post">
        {% csrf_token %}

                {{ test.change_id }}
                {{ test.change_param_name }}
                {{ test.value }}

<button type="submit">Search</button>
</form>

但是,我得到一个错误

* Ran4GRfAnrfunction没有名为“ change_param_name”的字段*

如何通过表单传递field_name?

在manage.py shell中,我尝试执行此操作及其工作。

from dumper.models import *
change_id = ['AG001_4G', 'AG002_4G']
change_value = ('Okay')
change_param_name = ('zzztemporary2')
Ran4GRfAnrfunction.objects.filter (pk__in = change_id) .update (zzztemporary2 = change_value)

如何将 change_param_name 的值传递给 .update

1 个答案:

答案 0 :(得分:1)

自从问题在这里待了五个小时以来,您可能已经知道了。

我无法完全测试此问题,但看来您的问题就在这里。此行告诉它更改change_param_name字段-不要更改与存储在change_param_name中的名称匹配的字段。

.update(change_param_name=change_value)

您应该可以通过将值放入字典并解压缩来解决此问题。

.update(**{change_param_name: change_value})