如何在django表单中为小部件提供自定义名称
我有一个小部件如何在django表单中为小部件提供自定义名称,django,django-forms,Django,Django Forms,我有一个小部件 Comments = forms.CharField(max_length=100,required=True) 现在我想把上面的小部件放在一个循环中,这样它就必须 Comments_1 = forms.CharField(max_length=100,required=True) Comments_2 = forms.CharField(max_length=100,required=True) Comments_3 = forms.CharField(max_length
Comments = forms.CharField(max_length=100,required=True)
现在我想把上面的小部件放在一个循环中,这样它就必须
Comments_1 = forms.CharField(max_length=100,required=True)
Comments_2 = forms.CharField(max_length=100,required=True)
Comments_3 = forms.CharField(max_length=100,required=True)
....
....
....
现在,我在django模板中硬编码表单字段,如下所示
我只是想在django表格下面的形式
{% for question in questions %}
<div class="well">
<h3>{{ question|striptags }} </h3>
{% if question.enumComment == "1" %}
<br>
<textarea name="fill_apraisal_comment{{ question.intQuesID }}" rows="3" cols="40" class="form-control">
{{fill_comments|keyvalue:question.intQuesID}}
</textarea>
{% endif %}
</div>
{% empty %}
<li>No Questions.</li>
{% endfor %}
{%用于问题中的问题%}
{{问题|标签}
{%if question.enumComment==“1”%}
{{fill_comments}keyvalue:question.intQuesID}
{%endif%}
{%empty%}
没有问题
{%endfor%}
您可以执行以下操作:
from django.utils import six
from django.forms.forms import get_declared_fields
from django.forms.widgets import media_property
class IteratedFieldsMetaclass(type):
def __new__(cls, name, bases, attrs):
attrs['base_fields'] = get_declared_fields(bases, attrs)
i = 0
while i < 5:
attrs['base_fields']['Comments_%s' % i] = forms.CharField()
i = i + 1
new_class = super(IteratedFieldsMetaclass,
cls).__new__(cls, name, bases, attrs)
if 'media' not in attrs:
new_class.media = media_property(new_class)
return new_class
class OrderForm(six.with_metaclass(IteratedFieldsMetaclass, forms.BaseForm)):
pass
像这样吗?确切地说,这些是“字段”:)您想要用于验证或呈现表单的字段吗?因为在模板中,您可以迭代表单字段。我希望该字段有我自己的自定义名称。字段必须是表单,具体取决于我给出的计数。实际上,我在数据库中有5个问题,问题id为。现在,我想为每个问题显示文本框。因此,每个文本框都应使用名称“textbox\u questionid”来形成如何使用视图和模板中的QuestionIteratedFieldsMetaclass?我可以形成文本框,但上面的代码无法验证。@user2627385我猜不出您打算如何使用它。也许再问一个问题?还是编辑这个?
from models import Question
class QuestionIteratedFieldsMetaclass(type):
def __new__(cls, name, bases, attrs):
attrs['base_fields'] = get_declared_fields(bases, attrs)
for question in Question.objects.all():
attrs['base_fields']['textbox_question%s' % question.id] = forms.CharField(label = question.question_text)
new_class = super(QuestionIteratedFieldsMetaclass,
cls).__new__(cls, name, bases, attrs)
if 'media' not in attrs:
new_class.media = media_property(new_class)
return new_class