python - 从 Django 表单实例中检索变量

标签 python html django django-forms

我有一个 Django 表单 NameForm。我试图迭代一个值数组,并且对于每个值,都可以选择显示相同的表单。表单提交时唯一应该更改的应该是表单旁边显示的关联值。

通过一个例子,这一点会变得更加清楚。对于某些数组 [1,2,3] 我们应该显示: an example display

然后我们可以单击任何打开表单图标,填写NameForm表单。结果信息,包括 form_id(在本例中为 1、2 或 3)应返回到 forms.py。如何从 index.py 中的 NameForm 实例获取 form_id 变量?

我的(hacky)尝试可以在下面找到。问题是我不知道如何访问在 NameForm 对象中创建的 form_id 变量。

forms.py

class NameForm(forms.Form):
    form_id = None
    your_name = forms.CharField(label='Your name', max_length=3)

views.py

def index(request):
    if request.method == 'POST':
        form = NameForm(request.POST)
        form_id = form.form_id # The problem line, as form_id is always None
        if form.is_valid():
            return HttpResponse( \
            ' '.join((str(form.cleaned_data['your_name']),form_id ))\
            ) #Throws TypeError as can't join None and string
    else:
        forms = []
        vals = [1,2,3]
        for val in vals:
            form = NameForm()
            form.form_id = val
            forms.append(form)
    return render(request, 'post/index.html', {'forms': forms})

index.html

    {%for form in forms%}
    {{form.form_id}}
    <button class="button" onclick="openForm()">Open Form</button>
    <div class="myForm">
        <form class="form-container" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit">
        <button class="button" onclick="closeForm()">Cancel</button>
        </form>
    </div>
    </br>
    {%endfor%}

最佳答案

在 Django Form 或 Django Model 中,当您将字段的值设置为 None 时,假定您要忽略该字段。当创建从另一个模型继承的模型并且您想要删除一些不必要的字段时,这非常有用。

如果您想在创建表单时设置字段的值,您应该将其传递到 __init__ 方法中。例如:

class NameForm(forms.Form):
    form_id = forms.IntegerField(widget=forms.HiddenInput())
    your_name = forms.CharField(label='Your name', max_length=3)

    def __init__(self, form_id, *args, **kwargs):
        self.fields['form_id'].initial = form_id

或者,您可以在创建 NameForm 实例时为 form_id 设置初始值,而不是重写 __init__ 方法。例如:

vals = [1,2,3]
forms = [NameForm(initial={'form_id': val}) for val in vals]

关于python - 从 Django 表单实例中检索变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57650391/

相关文章:

python - 从 python 列表中指定开始和结束位置

python - DeleteView 标记为不活动而不是删除?

javascript - 我可以使用 javascript 收听函数调用吗?

javascript - 用 html 标签替换文本区域中的字符

jquery.toggle() : is it possible to hide div with text?

django - 由Heroku中的gunicorn procfile引起的错误

python - Python 中的重载方法(解决方法)

python - 忽略 python 中的 SonarQube 警告

django - 如何查询人的内容(帖子/视频),当用户的详细信息和关注列表在单独的数据库中时,用户使用 Django ORM 关注

django - Django UpdateView 中的对象所有权验证