crispy - formularios django
utilizar la forma crujiente con ModelForm (1)
Soy el desarrollador líder de django-crispy-forms. No estoy seguro de seguir tu pregunta, ya que está un poco mal formateada. ¿Qué estás tratando de hacer exactamente?
django-crispy-forms funciona con ModelForms, de la misma manera que con formularios simples. Se sienta encima de Django, así que no se mete con eso. Solo controla la representación de formularios, pero no cambia cómo funciona la validación, cómo crear instancias de formularios, etc.
EDITAR:
Estoy agregando un ejemplo sobre cómo hacer un ModelForm
con formas crujientes.
class ExampleModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ExampleModelForm, self).__init__(*args, **kwargs)
# If you pass FormHelper constructor a form instance
# It builds a default layout with all its fields
self.helper = FormHelper(self)
# You can dynamically adjust your layout
self.helper.layout.append(Submit(''save'', ''save''))
class Meta:
model = ExampleModel
Creo que su primer problema es que estaba subclasificando forms.ModelForm
. forms.Form
lugar de forms.ModelForm
. forms.ModelForm
de forms.ModelForm
. Por eso dije que su problema estaba relacionado con Django, no con formas crujientes.
Más adelante en su punto de vista:
form = ExampleModelForm()
En su plantilla:
{% load crispy_forms_tags %}
{% crispy form %}
Me he estado ejecutando en forma crujiente , y parece que hace exactamente lo que quiero: renderizar formularios con diseño bootstrap.
Ahora, el ejemplo habla sobre el uso de forms.Form
. Esto está bien, puedo crear el mío escribiendo el código así:
class TemplateCreateForm(forms.Form):
title = forms.CharField(label=(u''Task name''))
description = forms.CharField(label=(u''Task description''))
url_start = forms.CharField(label=(u''Start page url''))
url_end = forms.CharField(label=(u''Final page url''))
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.form_method = ''post''
self.helper.add_input(Submit(''submit'', ''Submit''))
super(TemplateCreateForm, self).__init__(*args, **kwargs)
Pero, ¿cómo hacer la actualización? Porque si pongo esto en la vista:
form = TemplateCreateForm(request.POST or None, instance=template)
no funciona porque la instancia es solo para ModelForm.
Ahora, ¿puedo sustituir los forms.Form
con ModelForm
y usar un formulario crujiente para ModelForm? hice esto
class TemplateCreateForm(ModelForm):
title = forms.CharField(label=(u''Task name''))
description = forms.CharField(label=(u''Task description''))
url_start = forms.CharField(label=(u''Start page url''))
url_end = forms.CharField(label=(u''Final page url''))
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.form_method = ''post''
self.helper.add_input(Submit(''submit'', ''Submit''))
super(TemplateCreateForm, self).__init__(*args, **kwargs)
class Meta:
model = Template
exclude = (''user'')
Aquí agregué la clase Meta. Ahora: funciona, pero ¿es correcto usarlo así? La actualización funciona también de esta manera.
¿Cuál es la forma correcta de usar formularios para hacer la actualización?