在django-extra-views中结合使用django-dynamic-formset和CreateWithInlinesView - 多个表单集
我有三个模型:
class Client(models.Model):
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=40)
class Phone(models.Model):
number = models.CharField(max_length=10)
client = models.ForeignKey(Client)
class ClientEmail(models.Model):
client = models.ForeignKey(Client)
address = models.EmailField(verbose_name='Email')
一个表单和两个内联表单集:
class ClientForm(ModelForm):
class Meta:
model = Client
class PhoneFormSet(InlineFormSet):
model = Phone
extra = 1
class EmailFormSet(InlineFormSet):
model = ClientEmail
extra = 1
视图:
class ClientCreateView(LoginRequiredMixin, CreateWithInlinesView):
model = Client
inlines = [PhoneFormSet, EmailFormSet,]
还有正在使用的模板:
{% extends 'base.html' %}
{% block extra_head_script %}
<script src="{{ STATIC_URL }}js/jquery.formset.js"></script>
{% endblock %}
{% block content %}
<form action="." method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
{% for formset in inlines %}
<div id="{{ formset.prefix }}">
{% for subform in formset.forms %}
<table>
{{ subform.as_table }}
</table>
{% endfor %}
{{ formset.management_form }}
</div>
{% endfor %}
<input type="submit" value="Add client" class="submit"/>
</form>
{% endblock %}
我刚开始使用基于类的视图(ClassBasedViews),还搞不清楚怎么在我的模板中把 django-dynamic-formset 的JavaScript和 django-extra-views 一起用。
1 个回答
4
哦,我头疼……我搞明白了:
{% block extra_footer_script %}
<script type="text/javascript">
$(function() {
{% for formset in inlines %}
$('div#FormSet{{ formset.prefix }}').formset({
prefix: '{{ formset.prefix }}',
formCssClass: 'dynamic-formset{{ forloop.counter }}'
});
{% endfor %}
})
</script>
{% endblock %}
如果你发现有什么错误,请告诉我。同时也欢迎任何更好的建议。
对于那些想使用这个的人——是的,它应该可以与任意数量的表单集一起使用。