Python 基于查询结果动态添加表单字段
我有一个模型Python 基于查询结果动态添加表单字段,python,django,forms,django-1.6,Python,Django,Forms,Django 1.6,我有一个模型问题,里面有一系列问题。对于查询此表的结果,我想创建一个CharField。这是我最初的尝试,没有导致任何错误,但没有显示任何内容: def __init__(self, **kwargs): super(QuestionnaireForm, self).__init__(**kwargs) self.fields['questionnaire'] = dict() questions = Question.objects.all() for ques
问题
,里面有一系列问题。对于查询此表的结果,我想创建一个CharField。这是我最初的尝试,没有导致任何错误,但没有显示任何内容:
def __init__(self, **kwargs):
super(QuestionnaireForm, self).__init__(**kwargs)
self.fields['questionnaire'] = dict()
questions = Question.objects.all()
for question in questions:
self.fields['questionnaire']['question' + str(question.pk)] = forms.CharField(widget=forms.TextInput(attrs=dict(placeholder=_("Answer"))), label=_(question))
在我的模板中,我尝试:
<div class="questionnaire">
<h2>{% trans "Questionnaire" %}</h2>
{% if form.questionnaire %}
{% for question in form.questionnaire %}
<div class="row">
{% include "core/includes/field.html" with field=question %}
</div>
{% endfor %}
{% endif %}
</div>
在你看来试试这个
def myview(request):
questions = Question.objects.all()
if request.method == 'POST':
form = MyForm(request.POST, extra=questions)
if form.is_valid():
pass
else:
form = MyForm(extra=questions)
return render(request, "template", { 'form': form})
在forms.py中
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
extra = kwargs.pop('extra')
super(LoginForm, self).__init__(*args, **kwargs)
for question in extra:
self.fields['question_%s' % extra.id] = forms.CharField(widget=forms.TextInput())
用我们在参数中传递的额外字段来初始化表单
表单集:对于您的案例,您可以定义另一个表单问题:
class QuestionForm(forms.Form):
question = forms.CharField()
视图:
您可以看到,我们使用多个表单(myform simple form和questions是表单集,用于动态添加问题字段),您可以在视图中选中此选项
def myview(request):
questions = Question.objects.all()
if request.method == 'POST':
form = MyForm(request.POST, extra=questions)
if form.is_valid():
pass
else:
form = MyForm(extra=questions)
return render(request, "template", { 'form': form})
在forms.py中
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
extra = kwargs.pop('extra')
super(LoginForm, self).__init__(*args, **kwargs)
for question in extra:
self.fields['question_%s' % extra.id] = forms.CharField(widget=forms.TextInput())
用我们在参数中传递的额外字段来初始化表单
表单集:对于您的案例,您可以定义另一个表单问题:
class QuestionForm(forms.Form):
question = forms.CharField()
视图:
您可以看到,我们使用多个表单(myform simple form和questions是表单集,用于动态添加问题字段),您可以在视图中选中此选项
def myview(request):
questions = Question.objects.all()
if request.method == 'POST':
form = MyForm(request.POST, extra=questions)
if form.is_valid():
pass
else:
form = MyForm(extra=questions)
return render(request, "template", { 'form': form})
在forms.py中
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
extra = kwargs.pop('extra')
super(LoginForm, self).__init__(*args, **kwargs)
for question in extra:
self.fields['question_%s' % extra.id] = forms.CharField(widget=forms.TextInput())
用我们在参数中传递的额外字段来初始化表单
表单集:对于您的案例,您可以定义另一个表单问题:
class QuestionForm(forms.Form):
question = forms.CharField()
视图:
您可以看到,我们使用多个表单(myform simple form和questions是表单集,用于动态添加问题字段),您可以在视图中选中此选项
def myview(request):
questions = Question.objects.all()
if request.method == 'POST':
form = MyForm(request.POST, extra=questions)
if form.is_valid():
pass
else:
form = MyForm(extra=questions)
return render(request, "template", { 'form': form})
在forms.py中
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
extra = kwargs.pop('extra')
super(LoginForm, self).__init__(*args, **kwargs)
for question in extra:
self.fields['question_%s' % extra.id] = forms.CharField(widget=forms.TextInput())
用我们在参数中传递的额外字段来初始化表单
表单集:对于您的案例,您可以定义另一个表单问题:
class QuestionForm(forms.Form):
question = forms.CharField()
视图:
您可以看到我们使用多个表单(myform simple form和questions是表单集,用于动态添加问题字段)。您可以检查是否可以向我们显示您的显示?@m170897017抱歉,不确定您的意思,我添加了渲染输出和一些调试输出,以防您所指的内容。谢谢:)你能给我们看一下你的显示器吗?@m170897017对不起,我不知道你的意思,我已经添加了渲染输出和一些调试输出,以防你指的就是这个。谢谢:)你能给我们看一下你的显示器吗?@m170897017对不起,我不知道你的意思,我已经添加了渲染输出和一些调试输出,以防你指的就是这个。谢谢:)你能给我们看一下你的显示器吗?@m170897017对不起,我不知道你的意思,我已经添加了渲染输出和一些调试输出,以防你指的就是这个。谢谢:)谢谢,你的答案看起来和我刚找到的很像。问题是我在模板的不同区域专门输出了其他字段。是否有一种方法可以专门选择符合字段名的字段并在模板中循环?谢谢,使用了您的方法,然后在模板中
{%for form%}{%if“id_question”{%if“id_question”in field.auto_id%}…{%endif%}{%endfor%}
帮助我只选择了所需的字段。很高兴它成功了,我在论坛中找到了另一个解决方案。你可以尝试formset。如果你愿意,它更灵活。我对formset太无知了!表单集是django中的一个很好的特性,它可以在FeatureTanks中帮助您,您的答案看起来和我刚才发现的很相似。问题是我在模板的不同区域专门输出了其他字段。是否有一种方法可以专门选择符合字段名的字段并在模板中循环?谢谢,使用了您的方法,然后在模板中{%for form%}{%if“id_question”{%if“id_question”in field.auto_id%}…{%endif%}{%endfor%}
帮助我只选择了所需的字段。很高兴它成功了,我在论坛中找到了另一个解决方案。你可以尝试formset。如果你愿意,它更灵活。我对formset太无知了!表单集是django中的一个很好的特性,它可以在FeatureTanks中帮助您,您的答案看起来和我刚才发现的很相似。问题是我在模板的不同区域专门输出了其他字段。是否有一种方法可以专门选择符合字段名的字段并在模板中循环?谢谢,使用了您的方法,然后在模板中{%for form%}{%if“id_question”{%if“id_question”in field.auto_id%}…{%endif%}{%endfor%}
帮助我只选择了所需的字段。很高兴它成功了,我在论坛中找到了另一个解决方案。你可以尝试formset。如果你愿意,它更灵活。我对formset太无知了!表单集是django中的一个很好的特性,它可以在FeatureTanks中帮助您,您的答案看起来和我刚才发现的很相似。问题是我在模板的不同区域专门输出了其他字段。是否有一种方法可以专门选择符合字段名的字段并在模板中循环?谢谢,使用了您的方法,然后在模板中{%for form%}{%if“id_question”{%if“id_question”in field.auto_id%}…{%endif%}{%endfor%}
帮助我只选择了所需的字段。很高兴它成功了,我在论坛中找到了另一个解决方案。你可以尝试formset。如果你愿意,它更灵活。我对formset太无知了!表单集是django中的一个很好的特性,它可以在特性方面对您有很大的帮助