django-formfield 0.4 documentation

API

FormField

A form field which accepts a django.forms.Form, a string in the format ‘path.to.Class’ or a callable that returns a django.forms.Form as the first argument. FormFieldWidget is used as this fields widget.

Example Usage:

from django import forms
from formfield import FormField

class OtherInfoForm(forms.Form):
    other_name = forms.CharField()


class MyForm(forms.Form):

    name = forms.CharField()

    other_info = FormField(form=OtherInfoForm)

Note

Changed in 0.3: You must supply the kwarg argument form to ModelFormField

Seems odd to have a form within a form yea? Its more useful when using it with a model where the data is serialized to json.

ModelFormField

A model form field which accepts a django.forms.Form, a string in the format ‘path.to.Class’ or a callable that returns a django.forms.Form as the first argument. FormField is used as form field.

Example Usage:

from django.db import models
from django import forms
from formfield import ModelFormField

class MetaDataForm(forms.Form):
    alias = forms.CharField(required=False)
    phone = forms.CharField(required=False)
    email = forms.EmailField(required=False)


class Contact(models.Model):

    name = models.CharField(max_length=200)

    meta_data = ModelFormField(form=MetaDataForm)

FormFieldWidget

This is the widget used to render the output in a user friendly way. We added some methods to help render the output. The main method to override is the normal format_output, here is the default code:

ret = ['<ul class="formfield">']
for i, field in enumerate(self.fields):
    label = self.format_label(field, i)
    help_text = self.format_help_text(field, i)
    ret.append('<li>%s %s %s</li>' % (
        label, rendered_widgets[i], field.help_text and help_text))

ret.append('</ul>')
return six.u(''.join(ret))

It simply wraps the entire form in a <ul> tag with a css class of formfield, you can override this for more control.

Extra methods

If you don’t want to override the entire method you can override format_label and format_help_text as well. These methods accept to arguments, the bound field and a counter

FormFieldWidget.format_label

def format_label(self, field, counter):
    return '<label for="id_formfield_%s" %s>%s</label>' % (
        counter, field.field.required and 'class="required"', field.label)

FormFieldWidget.format_help_text

def format_help_text(self, field, counter):
    return '<p class="help">%s</p>' % field.help_text