def chooser(request): Document = get_document_model() if permission_policy.user_has_permission(request.user, 'add'): DocumentForm = get_document_form(Document) uploadform = DocumentForm(user=request.user) else: uploadform = None documents = Document.objects.all() # allow hooks to modify the queryset for hook in hooks.get_hooks('construct_document_chooser_queryset'): documents = hook(documents, request) q = None if 'q' in request.GET or 'p' in request.GET or 'collection_id' in request.GET: collection_id = request.GET.get('collection_id') if collection_id: documents = documents.filter(collection=collection_id) searchform = SearchForm(request.GET) if searchform.is_valid(): q = searchform.cleaned_data['q'] documents = documents.search(q) is_searching = True else: documents = documents.order_by('-created_at') is_searching = False # Pagination paginator, documents = paginate(request, documents, per_page=10) return render( request, "wagtaildocs/chooser/results.html", { 'documents': documents, 'query_string': q, 'is_searching': is_searching, }) else: searchform = SearchForm() collections = Collection.objects.all() if len(collections) < 2: collections = None documents = documents.order_by('-created_at') paginator, documents = paginate(request, documents, per_page=10) return render_modal_workflow( request, 'wagtaildocs/chooser/chooser.html', 'wagtaildocs/chooser/chooser.js', { 'documents': documents, 'uploadform': uploadform, 'searchform': searchform, 'collections': collections, 'is_searching': False, })
def chooser_upload(request): Document = get_document_model() DocumentForm = get_document_form(Document) if request.method == 'POST': document = Document(uploaded_by_user=request.user) form = DocumentForm(request.POST, request.FILES, instance=document, user=request.user) if form.is_valid(): document.file_size = document.file.size form.save() # Reindex the document to make sure all tags are indexed search_index.insert_or_update_object(document) return render_modal_workflow( request, None, 'wagtaildocs/chooser/document_chosen.js', {'document_json': get_document_json(document)}) else: form = DocumentForm(user=request.user) documents = Document.objects.order_by('title') return render_modal_workflow(request, 'wagtaildocs/chooser/chooser.html', 'wagtaildocs/chooser/chooser.js', { 'documents': documents, 'uploadform': form })
def chooser_upload(request): Document = get_document_model() DocumentForm = get_document_form(Document) if request.method == 'POST': document = Document(uploaded_by_user=request.user) form = DocumentForm(request.POST, request.FILES, instance=document, user=request.user) if form.is_valid(): document.file_size = document.file.size # Set new document file hash document.file.seek(0) document._set_file_hash(document.file.read()) document.file.seek(0) form.save() # Reindex the document to make sure all tags are indexed search_index.insert_or_update_object(document) return render_modal_workflow( request, None, None, None, json_data={'step': 'document_chosen', 'result': get_document_result_data(document)} ) else: form = DocumentForm(user=request.user) documents = Document.objects.order_by('title') return render_modal_workflow( request, 'wagtaildocs/chooser/chooser.html', None, {'documents': documents, 'uploadform': form}, json_data=get_chooser_context() )
def add(request): Document = get_document_model() DocumentForm = get_document_form(Document) if request.method == 'POST': doc = Document(uploaded_by_user=request.user) form = DocumentForm(request.POST, request.FILES, instance=doc, user=request.user) if form.is_valid(): doc.file_size = doc.file.size form.save() # Reindex the document to make sure all tags are indexed search_index.insert_or_update_object(doc) messages.success(request, _("Document '{0}' added.").format(doc.title), buttons=[ messages.button(reverse('wagtaildocs:edit', args=(doc.id,)), _('Edit')) ]) return redirect('wagtaildocs:index') else: messages.error(request, _("The document could not be saved due to errors.")) else: form = DocumentForm(user=request.user) return render(request, "wagtaildocs/documents/add.html", { 'form': form, })
def chooser_upload(request): Document = get_document_model() DocumentForm = get_document_form(Document) if request.method == 'POST': document = Document(uploaded_by_user=request.user) form = DocumentForm(request.POST, request.FILES, instance=document, user=request.user) if form.is_valid(): form.save() # Reindex the document to make sure all tags are indexed search_index.insert_or_update_object(document) return render_modal_workflow( request, None, 'wagtaildocs/chooser/document_chosen.js', {'document_json': get_document_json(document)} ) else: form = DocumentForm(user=request.user) documents = Document.objects.order_by('title') return render_modal_workflow( request, 'wagtaildocs/chooser/chooser.html', 'wagtaildocs/chooser/chooser.js', {'documents': documents, 'uploadform': form} )
def add(request): Document = get_document_model() DocumentForm = get_document_form(Document) if request.method == 'POST': doc = Document(uploaded_by_user=request.user) form = DocumentForm(request.POST, request.FILES, instance=doc, user=request.user) if form.is_valid(): doc.file_size = doc.file.size # Set new document file hash doc.file.seek(0) doc._set_file_hash(doc.file.read()) doc.file.seek(0) form.save() # Reindex the document to make sure all tags are indexed search_index.insert_or_update_object(doc) messages.success(request, _("Document '{0}' added.").format(doc.title), buttons=[ messages.button(reverse('wagtaildocs:edit', args=(doc.id,)), _('Edit')) ]) return redirect('wagtaildocs:index') else: messages.error(request, _("The document could not be saved due to errors.")) else: form = DocumentForm(user=request.user) return render(request, "wagtaildocs/documents/add.html", { 'form': form, })
def test_get_document_form_widgets(self): form_cls = get_document_form(models.Document) form = form_cls() self.assertIsInstance(form.fields["tags"].widget, widgets.AdminTagWidget) self.assertEqual(form.fields["tags"].widget.tag_model, taggit_models.Tag) self.assertIsInstance(form.fields["file"].widget, forms.FileInput)
def chooser(request): Document = get_document_model() if permission_policy.user_has_permission(request.user, 'add'): DocumentForm = get_document_form(Document) uploadform = DocumentForm(user=request.user) else: uploadform = None documents = Document.objects.all() # allow hooks to modify the queryset for hook in hooks.get_hooks('construct_document_chooser_queryset'): documents = hook(documents, request) q = None if 'q' in request.GET or 'p' in request.GET or 'collection_id' in request.GET: collection_id = request.GET.get('collection_id') if collection_id: documents = documents.filter(collection=collection_id) searchform = SearchForm(request.GET) if searchform.is_valid(): q = searchform.cleaned_data['q'] documents = documents.search(q) is_searching = True else: documents = documents.order_by('-created_at') is_searching = False # Pagination paginator, documents = paginate(request, documents, per_page=10) return render(request, "wagtaildocs/chooser/results.html", { 'documents': documents, 'query_string': q, 'is_searching': is_searching, }) else: searchform = SearchForm() collections = Collection.objects.all() if len(collections) < 2: collections = None documents = documents.order_by('-created_at') paginator, documents = paginate(request, documents, per_page=10) return render_modal_workflow(request, 'wagtaildocs/chooser/chooser.html', 'wagtaildocs/chooser/chooser.js', { 'documents': documents, 'uploadform': uploadform, 'searchform': searchform, 'collections': collections, 'is_searching': False, 'uploadid': uuid.uuid4(), })
def edit(request, document_id): Document = get_document_model() DocumentForm = get_document_form(Document) doc = get_object_or_404(Document, id=document_id) if not permission_policy.user_has_permission_for_instance(request.user, 'change', doc): return permission_denied(request) if request.method == 'POST': original_file = doc.file form = DocumentForm(request.POST, request.FILES, instance=doc, user=request.user) if form.is_valid(): doc = form.save() if 'file' in form.changed_data: doc.file_size = doc.file.size # if providing a new document file, delete the old one. # NB Doing this via original_file.delete() clears the file field, # which definitely isn't what we want... original_file.storage.delete(original_file.name) # Reindex the document to make sure all tags are indexed search_index.insert_or_update_object(doc) messages.success(request, _("Document '{0}' updated").format(doc.title), buttons=[ messages.button(reverse('wagtaildocs:edit', args=(doc.id,)), _('Edit')) ]) return redirect('wagtaildocs:index') else: messages.error(request, _("The document could not be saved due to errors.")) else: form = DocumentForm(instance=doc, user=request.user) try: local_path = doc.file.path except NotImplementedError: # Document is hosted externally (eg, S3) local_path = None if local_path: # Give error if document file doesn't exist if not os.path.isfile(local_path): messages.error( request, _("The file could not be found. Please change the source or delete the document"), buttons=[messages.button(reverse('wagtaildocs:delete', args=(doc.id,)), _('Delete'))] ) return render(request, "wagtaildocs/documents/edit.html", { 'document': doc, 'filesize': doc.get_file_size(), 'form': form, 'user_can_delete': permission_policy.user_has_permission_for_instance( request.user, 'delete', doc ), })
def edit(request, document_id): Document = get_document_model() DocumentForm = get_document_form(Document) doc = get_object_or_404(Document, id=document_id) if not permission_policy.user_has_permission_for_instance(request.user, 'change', doc): return permission_denied(request) if request.method == 'POST': original_file = doc.file form = DocumentForm(request.POST, request.FILES, instance=doc, user=request.user) if form.is_valid(): doc = form.save() if 'file' in form.changed_data: # if providing a new document file, delete the old one. # NB Doing this via original_file.delete() clears the file field, # which definitely isn't what we want... original_file.storage.delete(original_file.name) # Reindex the document to make sure all tags are indexed search_index.insert_or_update_object(doc) messages.success(request, _("Document '{0}' updated").format(doc.title), buttons=[ messages.button(reverse('wagtaildocs:edit', args=(doc.id,)), _('Edit')) ]) return redirect('wagtaildocs:index') else: messages.error(request, _("The document could not be saved due to errors.")) else: form = DocumentForm(instance=doc, user=request.user) filesize = None # Get file size when there is a file associated with the Document object if doc.file: try: filesize = doc.file.size except OSError: # File doesn't exist pass if not filesize: messages.error( request, _("The file could not be found. Please change the source or delete the document"), buttons=[messages.button(reverse('wagtaildocs:delete', args=(doc.id,)), _('Delete'))] ) return render(request, "wagtaildocs/documents/edit.html", { 'document': doc, 'filesize': filesize, 'form': form, 'user_can_delete': permission_policy.user_has_permission_for_instance( request.user, 'delete', doc ), })
def test_get_overridden_document_form_widgets(self): form_cls = get_document_form(models.Document) form = form_cls() self.assertIsInstance(form.fields["tags"].widget, OverriddenWidget) self.assertIsInstance(form.fields["file"].widget, OverriddenWidget) self.assertIn("form_only_field", form.fields) self.assertIs(form.Meta.widgets["form_only_field"], AdminDateTimeInput)
def get_doc_form(self, request): # Build a form for validation DocumentForm = get_document_form(DocumentSushi) return DocumentForm( { "title": request.FILES["file"].name, "collection": request.POST.get("collection"), }, {"file": request.FILES["file"]}, user=request.user, )
def chooser_upload(request): Document = get_document_model() DocumentForm = get_document_form(Document) if request.method == 'POST': document = Document(uploaded_by_user=request.user) form = DocumentForm(request.POST, request.FILES, instance=document, user=request.user, prefix='document-chooser-upload') if form.is_valid(): document.file_size = document.file.size # Set new document file hash document.file.seek(0) document._set_file_hash(document.file.read()) document.file.seek(0) form.save() # Reindex the document to make sure all tags are indexed search_index.insert_or_update_object(document) return render_modal_workflow(request, None, None, None, json_data={ 'step': 'document_chosen', 'result': get_document_result_data(document) }) else: form = DocumentForm(user=request.user, prefix='document-chooser-upload') documents = Document.objects.order_by('title') return render_modal_workflow(request, 'wagtaildocs/chooser/chooser.html', None, { 'documents': documents, 'uploadform': form }, json_data=get_chooser_context())
def get(self, request): Document = get_document_model() if permission_policy.user_has_permission(request.user, 'add'): DocumentForm = get_document_form(Document) self.uploadform = DocumentForm(user=request.user, prefix='document-chooser-upload') else: self.uploadform = None documents = permission_policy.instances_user_has_any_permission_for( request.user, ['choose']) # allow hooks to modify the queryset for hook in hooks.get_hooks('construct_document_chooser_queryset'): documents = hook(documents, request) self.q = None self.is_searching = False self.collection_id = request.GET.get('collection_id') if self.collection_id: documents = documents.filter(collection=self.collection_id) self.documents_exist = documents.exists() if 'q' in request.GET: self.searchform = SearchForm(request.GET) if self.searchform.is_valid(): self.q = self.searchform.cleaned_data['q'] documents = documents.search(self.q) self.is_searching = True else: self.searchform = SearchForm() if not self.is_searching: documents = documents.order_by('-created_at') paginator = Paginator(documents, per_page=10) self.documents = paginator.get_page(request.GET.get('p')) self.collections = permission_policy.collections_user_has_permission_for( request.user, 'choose') if len(self.collections) < 2: self.collections = None return self.render_to_response()
def chooser_upload(request): Document = get_document_model() DocumentForm = get_document_form(Document) if request.method == "POST": document = Document(uploaded_by_user=request.user) form = DocumentForm( request.POST, request.FILES, instance=document, user=request.user, prefix="document-chooser-upload", ) if form.is_valid(): document.file_size = document.file.size # Set new document file hash document.file.seek(0) document._set_file_hash(document.file.read()) document.file.seek(0) form.save() # Reindex the document to make sure all tags are indexed search_index.insert_or_update_object(document) return get_document_chosen_response(request, document) else: form = DocumentForm(user=request.user, prefix="document-chooser-upload") return render_modal_workflow( request, None, None, None, json_data={ "step": "reshow_upload_form", "htmlFragment": render_to_string("wagtaildocs/chooser/upload_form.html", {"form": form}, request), }, )
def chooser_upload(request): Document = get_document_model() DocumentForm = get_document_form(Document) DocumentMultiForm = get_document_multi_form(Document) if request.method == 'POST': if not request.is_ajax(): return http.HttpResponseBadRequest( "Cannot POST to this view without AJAX") if not request.FILES: return http.HttpResponseBadRequest("Must upload a file") # Save it document = Document(uploaded_by_user=request.user, title=request.FILES['files[]'].name, file=request.FILES['files[]']) document.save() # Success! Send back an edit form for this image to the user form = DocumentMultiForm(instance=document, prefix='doc-%d' % document.id, user=request.user) return http.JsonResponse({ 'success': True, 'doc_id': int(document.id), 'form': render_to_string('wagtaildocs/chooser/update.html', { 'doc': document, 'form': form, }, request=request), }) else: form = DocumentForm(user=request.user) documents = Document.objects.order_by('title') return render_modal_workflow( request, 'wagtaildocs/chooser/chooser.html', 'wagtaildocs/chooser/chooser.js', {'documents': documents, 'uploadform': form} )
def add(request): Document = get_document_model() DocumentForm = get_document_form(Document) if request.method == "POST": doc = Document(uploaded_by_user=request.user) form = DocumentForm(request.POST, request.FILES, instance=doc, user=request.user) if form.is_valid(): form.save() messages.success( request, _("Document '{0}' added.").format(doc.title), buttons=[ messages.button( reverse("wagtaildocs:edit", args=(doc.id, )), _("Edit")) ], ) return redirect("wagtaildocs:index") else: messages.error(request, _("The document could not be saved due to errors.")) else: form = DocumentForm(user=request.user) return TemplateResponse( request, "wagtaildocs/documents/add.html", { "form": form, }, )
def get_creation_form_class(self): return get_document_form(self.model)
from django.core.files.storage import default_storage from django.core.files.images import ImageFile from django.db.models.fields.files import FileField, FieldFile, ImageField, ImageFieldFile from wagtail.core.models import Collection from wagtail.documents.forms import get_document_form from wagtail.documents.models import Document from wagtail.images.fields import WagtailImageField from wagtail.images.forms import get_image_form from wagtail.images.models import Image from .core import mediabox DocumentForm = get_document_form(Document) ImageForm = get_image_form(Image) managed_collection = Collection.objects.get_or_create(name="Mediabox")[0] # Wagtail operations here. def image_from_file(file, path='/', collection=managed_collection): # logger.warn(f"Checking path: {path}") # file = mediabox.info(path) logger.warn(f"Processing file {file} as an image.") logger.warn(f"File name: {file.name}") logger.warn(f"File path: {path}") # img = Image(file=ImageFile(file, name=file.name),
def get_creation_form_class(self): from wagtail.documents.forms import get_document_form return get_document_form(self.model)
def edit(request, document_id): Document = get_document_model() DocumentForm = get_document_form(Document) doc = get_object_or_404(Document, id=document_id) if not permission_policy.user_has_permission_for_instance(request.user, 'change', doc): return permission_denied(request) if request.method == 'POST': original_file = doc.file form = DocumentForm(request.POST, request.FILES, instance=doc, user=request.user) if form.is_valid(): doc = form.save() if 'file' in form.changed_data: doc.file_size = doc.file.size # Set new document file hash doc.file.seek(0) doc._set_file_hash(doc.file.read()) doc.file.seek(0) # if providing a new document file, delete the old one. # NB Doing this via original_file.delete() clears the file field, # which definitely isn't what we want... original_file.storage.delete(original_file.name) # Reindex the document to make sure all tags are indexed search_index.insert_or_update_object(doc) messages.success(request, _("Document '{0}' updated").format(doc.title), buttons=[ messages.button(reverse('wagtaildocs:edit', args=(doc.id,)), _('Edit')) ]) return redirect('wagtaildocs:index') else: messages.error(request, _("The document could not be saved due to errors.")) else: form = DocumentForm(instance=doc, user=request.user) try: local_path = doc.file.path except NotImplementedError: # Document is hosted externally (eg, S3) local_path = None if local_path: # Give error if document file doesn't exist if not os.path.isfile(local_path): messages.error( request, _("The file could not be found. Please change the source or delete the document"), buttons=[messages.button(reverse('wagtaildocs:delete', args=(doc.id,)), _('Delete'))] ) return render(request, "wagtaildocs/documents/edit.html", { 'document': doc, 'filesize': doc.get_file_size(), 'form': form, 'user_can_delete': permission_policy.user_has_permission_for_instance( request.user, 'delete', doc ), })
def get(self, request): Document = get_document_model() if permission_policy.user_has_permission(request.user, "add"): DocumentForm = get_document_form(Document) self.uploadform = DocumentForm( user=request.user, prefix="document-chooser-upload" ) else: self.uploadform = None documents = permission_policy.instances_user_has_any_permission_for( request.user, ["choose"] ) # allow hooks to modify the queryset for hook in hooks.get_hooks("construct_document_chooser_queryset"): documents = hook(documents, request) self.q = None self.is_searching = False self.collection_id = request.GET.get("collection_id") if self.collection_id: documents = documents.filter(collection=self.collection_id) self.documents_exist = documents.exists() if "q" in request.GET: self.searchform = SearchForm(request.GET) if self.searchform.is_valid(): self.q = self.searchform.cleaned_data["q"] documents = documents.search(self.q) self.is_searching = True else: self.searchform = SearchForm() if not self.is_searching: documents = documents.order_by("-created_at") paginator = Paginator(documents, per_page=10) self.documents = paginator.get_page(request.GET.get("p")) self.collections = permission_policy.collections_user_has_permission_for( request.user, "choose" ) if len(self.collections) < 2: self.collections = None columns = [ TitleColumn( "title", label=_("Title"), url_name="wagtaildocs:document_chosen", link_classname="document-choice", ), DownloadColumn("filename", label=_("File")), DateColumn("created_at", label=_("Created"), width="16%"), ] if self.collections: columns.insert(2, Column("collection", label=_("Collection"))) self.table = Table(columns, self.documents) return self.render_to_response()
def post(self, request, *args, **kwargs): try: DocumentForm = get_document_form(self.model) except AttributeError: DocumentForm = get_document_form(self.document_model) if not request.is_ajax(): return HttpResponseBadRequest( "Cannot POST to this view without AJAX") if not request.FILES: return HttpResponseBadRequest("Must upload a file") # Build a form for validation form = DocumentForm( { 'title': request.FILES['file'].name, 'collection': request.POST.get('collection'), }, {'file': request.FILES['file']}, user=request.user) if form.is_valid(): # Save it doc = form.save(commit=False) doc.doc_type = self.doc_type if 'sub_type' in request.POST: print('sub_type:', request.POST['sub_type']) doc.sub_type = Subjects.objects.get( pk=request.POST['sub_type']) doc.uploaded_by_user = request.user doc.file_size = doc.file.size # Set new document file hash doc.file.seek(0) doc._set_file_hash(doc.file.read()) doc.file.seek(0) doc.save() print(doc, doc.sub_type) collections = permission_policy.collections_user_has_any_permission_for( request.user, ['add', 'change']) if len(collections) < 2: collections = None else: collections = Collection.order_for_display(collections) return JsonResponse({ 'success': True, 'documents': [{ 'title': doc.title, 'file_size': doc.file_size } for doc in self.get_documents()], 'collections': collections, 'doc_id': int(doc.id), }) else: # Validation error return JsonResponse({ 'success': False, # https://github.com/django/django/blob/stable/1.6.x/django/forms/util.py#L45 'error_message': '\n'.join([ '\n'.join([force_text(i) for i in v]) for k, v in form.errors.items() ]), })
def edit(request, document_id): Document = get_document_model() DocumentForm = get_document_form(Document) doc = get_object_or_404(Document, id=document_id) if not permission_policy.user_has_permission_for_instance( request.user, "change", doc): raise PermissionDenied next_url = get_valid_next_url_from_request(request) if request.method == "POST": original_file = doc.file form = DocumentForm(request.POST, request.FILES, instance=doc, user=request.user) if form.is_valid(): if "file" in form.changed_data: doc = form.save(commit=False) doc.file_size = doc.file.size # Set new document file hash doc.file.seek(0) doc._set_file_hash(doc.file.read()) doc.file.seek(0) doc.save() form.save_m2m() # If providing a new document file, delete the old one. # NB Doing this via original_file.delete() clears the file field, # which definitely isn't what we want... original_file.storage.delete(original_file.name) else: doc = form.save() # Reindex the document to make sure all tags are indexed search_index.insert_or_update_object(doc) edit_url = reverse("wagtaildocs:edit", args=(doc.id, )) redirect_url = "wagtaildocs:index" if next_url: edit_url = f"{edit_url}?{urlencode({'next': next_url})}" redirect_url = next_url messages.success( request, _("Document '{0}' updated").format(doc.title), buttons=[messages.button(edit_url, _("Edit"))], ) return redirect(redirect_url) else: messages.error(request, _("The document could not be saved due to errors.")) else: form = DocumentForm(instance=doc, user=request.user) try: local_path = doc.file.path except NotImplementedError: # Document is hosted externally (eg, S3) local_path = None if local_path: # Give error if document file doesn't exist if not os.path.isfile(local_path): messages.error( request, _("The file could not be found. Please change the source or delete the document" ), buttons=[ messages.button( reverse("wagtaildocs:delete", args=(doc.id, )), _("Delete")) ], ) return TemplateResponse( request, "wagtaildocs/documents/edit.html", { "document": doc, "filesize": doc.get_file_size(), "form": form, "user_can_delete": permission_policy.user_has_permission_for_instance( request.user, "delete", doc), "next": next_url, }, )
def chooser(request): Document = get_document_model() if permission_policy.user_has_permission(request.user, 'add'): DocumentForm = get_document_form(Document) uploadform = DocumentForm(user=request.user, prefix='document-chooser-upload') else: uploadform = None documents = permission_policy.instances_user_has_any_permission_for( request.user, ['choose']) # allow hooks to modify the queryset for hook in hooks.get_hooks('construct_document_chooser_queryset'): documents = hook(documents, request) q = None if 'q' in request.GET or 'p' in request.GET or 'collection_id' in request.GET: collection_id = request.GET.get('collection_id') if collection_id: documents = documents.filter(collection=collection_id) documents_exist = documents.exists() searchform = SearchForm(request.GET) if searchform.is_valid(): q = searchform.cleaned_data['q'] documents = documents.search(q) is_searching = True else: documents = documents.order_by('-created_at') is_searching = False # Pagination paginator = Paginator(documents, per_page=10) documents = paginator.get_page(request.GET.get('p')) return TemplateResponse( request, "wagtaildocs/chooser/results.html", { 'documents': documents, 'documents_exist': documents_exist, 'uploadform': uploadform, 'query_string': q, 'is_searching': is_searching, 'collection_id': collection_id, }) else: searchform = SearchForm() collections = permission_policy.collections_user_has_permission_for( request.user, 'choose') if len(collections) < 2: collections = None documents = documents.order_by('-created_at') documents_exist = documents.exists() paginator = Paginator(documents, per_page=10) documents = paginator.get_page(request.GET.get('p')) return render_modal_workflow(request, 'wagtaildocs/chooser/chooser.html', None, { 'documents': documents, 'documents_exist': documents_exist, 'uploadform': uploadform, 'searchform': searchform, 'collections': collections, 'is_searching': False, }, json_data=get_chooser_context())
def edit(request, document_id): Document = get_document_model() DocumentForm = get_document_form(Document) doc = get_object_or_404(Document, id=document_id) if not permission_policy.user_has_permission_for_instance( request.user, "change", doc): raise PermissionDenied next_url = get_valid_next_url_from_request(request) if request.method == "POST": form = DocumentForm(request.POST, request.FILES, instance=doc, user=request.user) if form.is_valid(): doc = form.save() edit_url = reverse("wagtaildocs:edit", args=(doc.id, )) redirect_url = "wagtaildocs:index" if next_url: edit_url = f"{edit_url}?{urlencode({'next': next_url})}" redirect_url = next_url messages.success( request, _("Document '{0}' updated").format(doc.title), buttons=[messages.button(edit_url, _("Edit"))], ) return redirect(redirect_url) else: messages.error(request, _("The document could not be saved due to errors.")) else: form = DocumentForm(instance=doc, user=request.user) try: local_path = doc.file.path except NotImplementedError: # Document is hosted externally (eg, S3) local_path = None if local_path: # Give error if document file doesn't exist if not os.path.isfile(local_path): messages.error( request, _("The file could not be found. Please change the source or delete the document" ), buttons=[ messages.button( reverse("wagtaildocs:delete", args=(doc.id, )), _("Delete")) ], ) return TemplateResponse( request, "wagtaildocs/documents/edit.html", { "document": doc, "filesize": doc.get_file_size(), "form": form, "user_can_delete": permission_policy.user_has_permission_for_instance( request.user, "delete", doc), "next": next_url, }, )
def test_tags_widget_with_custom_tag_model(self): form_cls = get_document_form(CustomRestaurantDocument) form = form_cls() self.assertIsInstance(form.fields["tags"].widget, widgets.AdminTagWidget) self.assertEqual(form.fields["tags"].widget.tag_model, RestaurantTag)
def test_get_overridden_document_form(self): bases = get_document_form(models.Document).__bases__ self.assertNotIn(BaseDocumentForm, bases) self.assertIn(AlternateDocumentForm, bases)