def add_provider(request): # users should only be able to make one provider if request.user.is_authenticated(): return HttpResponseRedirect(reverse('index')) else: LocationFormset = modelformset_factory(Location, exclude=('provider', )) if request.method == "POST": admin_form = UserCreationForm(request.POST) provider_form = ProviderForm(request.POST) location_formset = LocationFormset(request.POST, request.FILES) if admin_form.is_valid() and provider_form.is_valid( ) and location_formset.is_valid(): u_name = admin_form.cleaned_data.get('username') u_pass = admin_form.cleaned_data.get('password2') admin = admin_form.save() provider = provider_form.save(commit=False) provider.admin = admin provider.save() for location_form in location_formset: location = location_form.save(commit=False) location.provider = provider location.save() location_form.save_m2m() location_formset.save() user = authenticate(username=u_name, password=u_pass) login(request, user) return HttpResponseRedirect( reverse('provider_detail', kwargs={'provider_id': provider.id})) else: admin_form = UserCreationForm() provider_form = ProviderForm() location_formset = LocationFormset( queryset=Location.objects.none()) return render( request, "provider/new.html", { 'provider_form': provider_form, 'location_formset': location_formset, 'admin_form': admin_form, })
def edit_provider(request, provider_id): provider = get_object_or_404(Provider, id=provider_id) admin_user = provider.admin if request.user == admin_user: # only the provider's registered user can edit page if request.method == 'POST': password_change_form = PasswordChangeForm(request.POST) provider_form = ProviderForm(request.POST, instance=provider) location_formset = LocationForm(request.POST, request.FILES) if password_change_form.is_valid() and provider_form.is_valid( ) and location_form.is_valid(): password_change_form.save() provider = provider_form.save(commit=False) provider.admin = admin_user provider.save() for location_form in location_formset: location = location_form.save(commit=False) location.provider = provider #location.save() location_form.save_m2m() location_formset.save() return HttpResponseRedirect( reverse('provider_detail', kwargs={'provider_id': provider.id})) else: password_change_form = PasswordChangeForm(user=admin_user) provider_form = ProviderForm(instance=provider) location_formset = LocationFormset( queryset=Location.objects.filter(provider__pk=provider_id)) return render( request, "provider/edit.html", { 'provider': provider, 'provider_form': provider_form, 'location_formset': location_formset, }) else: return HttpResponseRedirect(reverse('index'))