'Renders the field by rendering the passed widget, adding any HTML
attributes passed as attrs.  If no widget is specified, then the
field\'s default widget will be used.'

def as_widget(self, widget=None, attrs=None, only_initial=False):

    if (not widget):
        widget = self.field.widget
    attrs = (attrs or {})
    auto_id = self.auto_id
    if (auto_id and ('id' not in attrs) and ('id' not in widget.attrs)):
        if (not only_initial):
            attrs['id'] = auto_id
        else:
            attrs['id'] = self.html_initial_id
    if (not self.form.is_bound):
        data = self.form.initial.get(self.name, self.field.initial)
        if callable(data):
            data = data()
    elif (isinstance(self.field, FileField) and (self.data is None)):
        data = self.form.initial.get(self.name, self.field.initial)
    else:
        data = self.data
    data = self.field.prepare_value(data)
    if (not only_initial):
        name = self.html_name
    else:
        name = self.html_initial_name
    return widget.render(name, data, attrs=attrs)
