Version 1 (modified by Øyvind Saltvik <oyvind.saltvik@…>, 11 years ago) (diff)


Work in progress


class SomeFile(models.Model):
    description = models.CharField(maxlength=255)
    file = models.FileField(upload_to='files')


from models import SomeFile
from django import forms

class AddFileManipulator(forms.Manipulator):
    def __init__(self):
        self.fields = (           
            forms.TextField(field_name="description", length=30, maxlength=200, is_required=True),
            forms.FileField(field_name="file", is_required=True)


from manipulators import 

def upload_file(request):
    manipulator = AddFileManipulator()

    if request.method == 'POST':
        # If data was POSTed, we're trying to create a new Place.
        new_data = request.POST.copy()

        # Check for errors.
        errors = manipulator.get_validation_errors(new_data)

        if not errors:
            # No errors. This means we can save the data!
            new_place =

            # Redirect to the object's "edit" page. Always use a redirect
            # after POST data, so that reloads don't accidently create
            # duplicate entires, and so users don't see the confusing
            # "Repost POST data?" alert box in their browsers.
            return HttpResponseRedirect("/places/edit/%i/" %
        # No POST, so we want a brand new form without any data or errors.
        errors = new_data = {}

    # Create the FormWrapper, template, context, response.
    form = forms.FormWrapper(manipulator, new_data, errors)
    return render_to_response('add_file.html', {'form': form})

Back to Top