def update_field(request, pk, field): """ This is function and not a CreateView/Update as it points to a template with less fields :param request: :param pk: primary key of Canvas :param field: which field to update :return: """ widgets = {} if field=='logo': widgets[field] = ClearableFileInput() else: widgets[field] = Textarea(attrs={'rows':4, 'cols':150}) CanvasForm = modelform_factory(Canvas, fields=(field,), widgets=widgets) if request.method == 'POST': form = CanvasForm(request.POST) if form.is_valid(): obj = Canvas.objects.get(id=pk) if obj.originalauthor == request.user: # more maintainable than dfunckt/django-rules if 'logo' in request.FILES: data = ContentFile(request.FILES['logo'].file.read()) filename = request.FILES['logo'].name form.cleaned_data['logo'] = filename default_storage.save(filename, data) setattr(obj, field, form.cleaned_data[field]) obj.save() return HttpResponseRedirect('/canvas/'+pk) else: return HttpResponseRedirect('/login/') else: form = CanvasForm(instance = Canvas.objects.get(id=pk)) return render(request, 'app/canvas_form.html', {'formfield': form})
def create_canvas(request): """ This is function and not a CreateView/Update as it points to a template with less fields :param request: :param pk: primary key of Canvas :param field: which field to update :return: """ if request.method == 'POST': form = CanvasForm(request.POST) if form.is_valid(): form.cleaned_data['originalauthor'] = request.user if 'logo' in request.FILES: data = ContentFile(request.FILES['logo'].file.read()) filename = request.FILES['logo'].name form.cleaned_data['logo'] = filename default_storage.save(filename, data) obj = Canvas.objects.create(**form.cleaned_data) return HttpResponseRedirect("/canvas/%d" % obj.id) else: form = CanvasForm() # blank form return render(request, 'app/canvas_new.html', {'company': form['company'],'description': form['description'],'logo': form['logo']})