def handle_documents(request, owner_name=None): """ Display a Model Formset for Documents of all labels. Allow Save or Delete. BUG : Description disappears after a transaction. """ page_owner = get_page_owner(request, owner_name) DocumentFormSet = modelformset_factory( Document, form=DocumentForm, extra=1, can_delete=True, ) dfs_list = [] if request.method == 'POST': is_form_valid = True for label in doc_label_list: dfs_list.append( DocumentFormSet( request.POST, request.FILES, prefix=label, queryset=Document.objects.filter(label__name=label))) is_form_valid = is_form_valid and dfs_list[-1].is_valid() if is_form_valid: for dfs in dfs_list: # From Django 1.3, FileField files won't get deleted, only # the model object will. So, we do it ourselves. for form in dfs.deleted_forms: delete_this_file( os.path.join(settings.MEDIA_ROOT, form.instance.document.name)) documents = dfs.save(commit=False) for document in documents: print 'Document : ', document document.uploader = page_owner document.label = Label.objects.get(name=dfs.prefix) document.save() return redirect('tasks.views.handle_documents', owner_name) dfs_list = [] for label in doc_label_list: dfs_list.append( DocumentFormSet( prefix=label, queryset=Document.objects.filter(label__name=label))) dfs_heading_list = zip(dfs_list, doc_heading_list) return render_to_response('tasks/documents.html', locals(), context_instance=global_context(request))
def handle_task_documents (request, owner_name = None, task_id = None, other_errors = False, only_validity = False): """ Display a Inline Formset of Documents. Save or delete as required. Status : Invalid - for invalid document form(s) Success - successful upload Valid - Blank or valid formset only_validity : If True, only check whether the formset is valid or not and return formset and status other_errors : supposed to make the file field hold its value if there is some error in Tasks / SubTasks. Not working. Return the formset, status. """ page_owner = get_page_owner (request, owner_name) TaskDocumentFormSet = inlineformset_factory (Task, TaskDocument, form = TaskDocumentForm, extra = 2, can_delete = True) if task_id is not None: curr_task = Task.objects.get (id = task_id) else: curr_task = None status = 'OK' if request.method == 'POST': tdfs = TaskDocumentFormSet (request.POST, request.FILES, instance = curr_task) if only_validity: if tdfs.is_valid (): return tdfs, 'Valid' return tdfs, 'Invalid' if not other_errors: if tdfs.is_valid (): # From Django 1.3, FileField files won't get deleted, only # the model object will. So, we do it ourselves. for form in tdfs.deleted_forms: delete_this_file (os.path.join (settings.MEDIA_ROOT, form.instance.document.name)) documents = tdfs.save (commit = False) for document in documents: print 'Document : ', document document.uploader = page_owner document.save () status = 'Success' else: # In case the formset isn't valid status = 'Invalid' if not other_errors and status != 'Invalid': tdfs = TaskDocumentFormSet (instance = curr_task) return tdfs, status
def handle_documents (request, owner_name = None): """ Display a Model Formset for Documents of all labels. Allow Save or Delete. BUG : Description disappears after a transaction. """ page_owner = get_page_owner (request, owner_name) DocumentFormSet = modelformset_factory ( Document, form = DocumentForm, extra = 1, can_delete = True,) dfs_list = [] if request.method == 'POST': is_form_valid = True for label in doc_label_list: dfs_list.append (DocumentFormSet (request.POST, request.FILES, prefix = label, queryset = Document.objects.filter ( label__name = label))) is_form_valid = is_form_valid and dfs_list[-1].is_valid () if is_form_valid: for dfs in dfs_list: # From Django 1.3, FileField files won't get deleted, only # the model object will. So, we do it ourselves. for form in dfs.deleted_forms: delete_this_file (os.path.join (settings.MEDIA_ROOT, form.instance.document.name)) documents = dfs.save (commit = False) for document in documents: print 'Document : ', document document.uploader = page_owner document.label = Label.objects.get (name = dfs.prefix) document.save () return redirect ('tasks.views.handle_documents', owner_name) dfs_list = [] for label in doc_label_list: dfs_list.append (DocumentFormSet (prefix = label, queryset = Document.objects.filter ( label__name = label))) dfs_heading_list = zip (dfs_list, doc_heading_list) return render_to_response('tasks/documents.html', locals(), context_instance = global_context (request))
def save_all(self, user, commit=True): """ Save all formsets and along with their nested formsets and nested comment form. """ print 'In save_all' # Save without committing (so self.saved_forms is populated) # -- We need self.saved_forms so we can go back and access # the nested formsets objects = self.save(commit=False) # Save each instance if commit=True if commit: for o in objects: o.save() # save many to many fields if needed if not commit: self.save_m2m() # save the nested formsets for form in set(self.initial_forms + self.saved_forms): if self.should_delete(form): continue # Docs to be deleted for doc_form in form.nested_docs.deleted_forms: # From Django 1.3, FileField files won't get deleted, only # the model object will. So, we do it ourselves. delete_this_file( os.path.join(settings.MEDIA_ROOT, doc_form.instance.document.name)) # Docs to be saved curr_docs = form.nested_docs.save(commit=False) for doc in curr_docs: doc.uploader = user if commit: doc.save() print 'Curr Docs : ', curr_docs # Save the comment form (if it isn't empty) if form.nested_comment.cleaned_data['comment_string'] != '': curr_comment = form.nested_comment.save(commit=False) curr_comment.author = user curr_comment.subtask = form.instance if commit: curr_comment.save()
def save_all(self, user, commit=True): """ Save all formsets and along with their nested formsets and nested comment form. """ print 'In save_all' # Save without committing (so self.saved_forms is populated) # -- We need self.saved_forms so we can go back and access # the nested formsets objects = self.save(commit=False) # Save each instance if commit=True if commit: for o in objects: o.save() # save many to many fields if needed if not commit: self.save_m2m() # save the nested formsets for form in set(self.initial_forms + self.saved_forms): if self.should_delete(form): continue # Docs to be deleted for doc_form in form.nested_docs.deleted_forms: # From Django 1.3, FileField files won't get deleted, only # the model object will. So, we do it ourselves. delete_this_file (os.path.join (settings.MEDIA_ROOT, doc_form.instance.document.name)) # Docs to be saved curr_docs = form.nested_docs.save(commit = False) for doc in curr_docs: doc.uploader = user if commit: doc.save () print 'Curr Docs : ', curr_docs # Save the comment form (if it isn't empty) if form.nested_comment.cleaned_data['comment_string'] != '': curr_comment = form.nested_comment.save (commit = False) curr_comment.author = user curr_comment.subtask = form.instance if commit: curr_comment.save ()
def handle_task_documents(request, owner_name=None, task_id=None, other_errors=False, only_validity=False): """ Display a Inline Formset of Documents. Save or delete as required. Status : Invalid - for invalid document form(s) Success - successful upload Valid - Blank or valid formset only_validity : If True, only check whether the formset is valid or not and return formset and status other_errors : supposed to make the file field hold its value if there is some error in Tasks / SubTasks. Not working. Return the formset, status. """ page_owner = get_page_owner(request, owner_name) TaskDocumentFormSet = inlineformset_factory(Task, TaskDocument, form=TaskDocumentForm, extra=2, can_delete=True) if task_id is not None: curr_task = Task.objects.get(id=task_id) else: curr_task = None status = 'OK' if request.method == 'POST': tdfs = TaskDocumentFormSet(request.POST, request.FILES, instance=curr_task) if only_validity: if tdfs.is_valid(): return tdfs, 'Valid' return tdfs, 'Invalid' if not other_errors: if tdfs.is_valid(): # From Django 1.3, FileField files won't get deleted, only # the model object will. So, we do it ourselves. for form in tdfs.deleted_forms: delete_this_file( os.path.join(settings.MEDIA_ROOT, form.instance.document.name)) documents = tdfs.save(commit=False) for document in documents: print 'Document : ', document document.uploader = page_owner document.save() status = 'Success' else: # In case the formset isn't valid status = 'Invalid' if not other_errors and status != 'Invalid': tdfs = TaskDocumentFormSet(instance=curr_task) return tdfs, status