来自http://django-crispy-forms.readthedocs.org/en/latest/form_helper.html
form_tag = 真
它指定是否应该呈现标签
使用布局时。如果设置为 False,它会呈现没有
标签。默认为真。
还可以阅读
disable_csrf = 假
这样你就可以声明基础助手类了:
class CommonFormHelper(FormHelper):
def __init__(self):
super(CommonFormHelper, self).__init__()
self.disable_csrf = True
self.form_tag = False
然后更新您的模型表单
class ModelFormOne(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.helper = CommonFormHelper()
self.helper.layout = Layout(
'someField1', 'someField2',
)
super(ModelFormOne, self).__init__(*args, **kwargs)
class Meta:
model = ModelOne
让我们看看模板:
<form method="post" enctype="multipart/form-data" class="mainForm">{% csrf_token %}
{% crispy form_one form_one.helper %}
{% crispy form_two form_two.helper %}
<input class="btn btn-lg btn-success btn-submit center-block" type="submit" value="Save"/>
</form>
最后在您的视图中实现某种 Mixin 类,您可以将其作为超类添加到您的 Create 和 Update 视图中(它不是最后一个,您可以简单地复制粘贴,仅来自我的想法头,你应该完成它)
class ObjectsAddEditMixin(object):
def get(self, request, *args, **kwargs):
pass
def get_context_data(self, *args, **kwargs):
pass
def get_pks(self, **kwargs):
self.pk1 = kwargs.get('pk1')
self.pk2 = kwargs.get('pk2')
def get_objects():
self.objects = {}
self.objects['form_one'] = get_object_ot_404(ModelOne, pk=self.pk1)
self.objects['form_two'] = get_object_ot_404(ModelTwo, pk=self.pk2)
return self.objects
def post(self, request, *args, **kwargs):
if self.pk_1 and self.pk_2:
self.objects = self.get_objects()
form_one = self.form_class_one(request.POST, request.FILES, instance=self.objects['form_one'])
form_two = self.form_class_two(request.POST, request.FILES, instance=self.objects['form_two'])
else:
form_one = self.form_class(request.POST, request.FILES)
form_two = self.form_class(request.POST, request.FILES)
if form_one.is_valid() and form_two.is_valid():
return self.form_valid(form_one, form_two)
else:
return self.form_invalid(form_one, form_two)
def form_valid(self, form_one, form_two):
form_one.save()
form_two.save()
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form_one, form_two):
return self.render_to_response(
self.get_context_data(
form_one=form_one,
form_two=form_two
)
)
def get_success_url(self):
return reverse('app:url_name')
class ObjectsCreateView(ObjectsAddEditMixin, View):
def get_context_data(self, **kwargs):
context = super(ObjectsCreateView, self).get_context_data(**kwargs)
context['form_one'] = self.form_class_one(instance=ModelOne())
context['form_two'] = self.form_class_two(instance=ModelTwo())
return context
class ObjectsUpdateView(ObjectsAddEditMixin, View):
def get_context_data(self, **kwargs):
context = super(ObjectsUpdateView, self).get_context_data(**kwargs)
context['form_one'] = self.form_class_two(instance=self.objects['form_one'])
context['form_two'] = self.form_class_one(instance=self.objects['form_two'])
return context