我有一个 Django 表单 NameForm
。我试图迭代一个值数组,并且对于每个值,都可以选择显示相同的表单。表单提交时唯一应该更改的应该是表单旁边显示的关联值。
通过一个例子,这一点会变得更加清楚。对于某些数组 [1,2,3]
我们应该显示:
然后我们可以单击任何打开表单
图标,填写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/