def edit(request, placetype_slug):
    """
    Edit all Places linked to a PlaceType
    """
    # get_or_create a PlaceType (no permission required)
    place_type, created = PlaceType.objects.get_or_create(slug=placetype_slug, 
                                             defaults={'label':placetype_slug})
    # build the formset in a standard django way
    # extra=0, we deal with additionnal forms via empty_form
    PlaceFormSet = inlineformset_factory(PlaceType, Place, 
                                                       form=PlaceForm, extra=0)
    if request.method == "POST":
        form = PlaceTypeForm(request.POST, instance=place_type)
        formset = PlaceFormSet(request.POST, instance=place_type)
        # due to project scope (form is always valid), 
        # we process simultaneously form and formset validations
        if form.is_valid() and formset.is_valid():
            form.save()
            formset.save()
        else:
            # return below to show invalid forms if needed
            return render_to_response('places/edit.html', 
                                      {'form': form, 'formset':formset}, 
                                      context_instance=RequestContext(request))
    # if request.method is get or post succeed, we fill form and formset with
    # latest values. 
    form = PlaceTypeForm(instance=place_type)
    formset = PlaceFormSet(instance=place_type)
    # return below for request.method =! "POST" 
    return render_to_response('places/edit.html', 
                                      {'form': form, 'formset':formset, 
                                       }, 
                                      context_instance=RequestContext(request))
def list(request):
    """
    List all PlaceTypes in the app
    """
    object_list = PlaceType.objects.all()
    if request.method == "POST":
        form = PlaceTypeForm(request.POST)
        if form.is_valid():
            label = form.cleaned_data['label']
            slug = slugify(label)
            place_type, created = PlaceType.objects.get_or_create(slug=slug,
                                             defaults={'label':label})
            return redirect('edit', placetype_slug=slug)
    form = PlaceTypeForm()
    return render_to_response('places/list.html', {'object_list': object_list, 'form':form}, 
                                      context_instance=RequestContext(request))