template formularios form crispy bootstrap django django-models django-forms django-crispy-forms

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?