def index(request): Image = get_image_model() # Get images (filtered by user permission) images = permission_policy.instances_user_has_any_permission_for( request.user, ['change', 'delete'] ).order_by('-created_at') # Search query_string = None if 'q' in request.GET: form = SearchForm(request.GET, placeholder=_("Search images")) if form.is_valid(): query_string = form.cleaned_data['q'] images = images.search(query_string) else: form = SearchForm(placeholder=_("Search images")) # Filter by collection current_collection = None collection_id = request.GET.get('collection_id') if collection_id: try: current_collection = Collection.objects.get(id=collection_id) images = images.filter(collection=current_collection) except (ValueError, Collection.DoesNotExist): pass paginator = Paginator(images, per_page=20) images = paginator.get_page(request.GET.get('p')) 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) # Create response if request.is_ajax(): return render(request, 'wagtailimages/images/results.html', { 'images': images, 'query_string': query_string, 'is_searching': bool(query_string), }) else: return render(request, 'wagtailimages/images/index.html', { 'images': images, 'query_string': query_string, 'is_searching': bool(query_string), 'search_form': form, 'popular_tags': popular_tags_for_model(Image), 'collections': collections, 'current_collection': current_collection, 'user_can_add': permission_policy.user_has_permission(request.user, 'add'), })
def index(request): # Get Videos (filtered by user permission) videos = Video.objects.all() # Search query_string = None if 'q' in request.GET: form = SearchForm(request.GET, placeholder=_("Search videos")) if form.is_valid(): query_string = form.cleaned_data['q'] videos = videos.search(query_string) else: form = SearchForm(placeholder=_("Search videos")) # Filter by collection current_collection = None collection_id = request.GET.get('collection_id') if collection_id: try: current_collection = Collection.objects.get(id=collection_id) videos = videos.filter(collection=current_collection) except (ValueError, Collection.DoesNotExist): pass paginator = Paginator(videos, per_page=25) 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) page = paginator.get_page(request.GET.get('p')) # Create response if request.is_ajax(): response = render(request, 'wagtailvideos/videos/results.html', { 'videos': page, 'query_string': query_string, 'is_searching': bool(query_string), }) return response else: response = render(request, 'wagtailvideos/videos/index.html', { 'videos': page, 'query_string': query_string, 'is_searching': bool(query_string), 'search_form': form, 'popular_tags': popular_tags_for_model(Video), 'current_collection': current_collection, 'collections': collections, }) return response
def get(self, request, *args, **kwargs): 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) # Create response return super().get(request, *args, **kwargs)
def get_chooser_context(request): """Helper function to return common template context variables for the main chooser view""" collections = Collection.objects.all() if len(collections) < 2: collections = None else: collections = Collection.order_for_display(collections) return { 'searchform': SearchForm(), 'is_searching': False, 'query_string': None, 'popular_tags': popular_tags_for_model(get_media_model()), 'collections': collections, }
def get_chooser_context(request): """Helper function to return common template context variables for the main chooser view""" collections = Collection.objects.all() if len(collections) < 2: collections = None else: collections = Collection.order_for_display(collections) return { 'searchform': SearchForm(), 'is_searching': False, 'query_string': None, 'will_select_format': request.GET.get('select_format'), 'popular_tags': popular_tags_for_model(get_image_model()), 'collections': collections, }
def index(request): Document = get_document_model() # Get documents (filtered by user permission) documents = permission_policy.instances_user_has_any_permission_for( request.user, ['change', 'delete'] ) # Ordering if 'ordering' in request.GET and request.GET['ordering'] in ['title', '-created_at']: ordering = request.GET['ordering'] else: ordering = '-created_at' documents = documents.order_by(ordering) # Filter by collection current_collection = None collection_id = request.GET.get('collection_id') if collection_id: try: current_collection = Collection.objects.get(id=collection_id) documents = documents.filter(collection=current_collection) except (ValueError, Collection.DoesNotExist): pass # Search query_string = None if 'q' in request.GET: form = SearchForm(request.GET, placeholder=_("Search documents")) if form.is_valid(): query_string = form.cleaned_data['q'] documents = documents.search(query_string) else: form = SearchForm(placeholder=_("Search documents")) # Pagination paginator = Paginator(documents, per_page=20) documents = paginator.get_page(request.GET.get('p')) 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) # Create response if request.is_ajax(): return render(request, 'wagtaildocs/documents/results.html', { 'ordering': ordering, 'documents': documents, 'query_string': query_string, 'is_searching': bool(query_string), }) else: return render(request, 'wagtaildocs/documents/index.html', { 'ordering': ordering, 'documents': documents, 'query_string': query_string, 'is_searching': bool(query_string), 'search_form': form, 'popular_tags': popular_tags_for_model(Document), 'user_can_add': permission_policy.user_has_permission(request.user, 'add'), 'collections': collections, 'current_collection': current_collection, })
def add(request): Image = get_image_model() ImageForm = get_image_form(Image) collections = permission_policy.collections_user_has_permission_for(request.user, 'add') if len(collections) > 1: collections_to_choose = Collection.order_for_display(collections) else: # no need to show a collections chooser collections_to_choose = None if request.method == 'POST': 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 = ImageForm({ 'title': request.FILES['files[]'].name, 'collection': request.POST.get('collection'), }, { 'file': request.FILES['files[]'], }, user=request.user) if form.is_valid(): # Save it image = form.save(commit=False) image.uploaded_by_user = request.user image.file_size = image.file.size image.file.seek(0) image._set_file_hash(image.file.read()) image.file.seek(0) image.save() # Success! Send back an edit form for this image to the user return JsonResponse({ 'success': True, 'image_id': int(image.id), 'form': render_to_string('wagtailimages/multiple/edit_form.html', { 'image': image, 'form': get_image_edit_form(Image)( instance=image, prefix='image-%d' % image.id, user=request.user ), }, request=request), }) 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()]), }) else: form = ImageForm(user=request.user) return render(request, 'wagtailimages/multiple/add.html', { 'max_filesize': form.fields['file'].max_upload_size, 'help_text': form.fields['file'].help_text, 'allowed_extensions': ALLOWED_EXTENSIONS, 'error_max_file_size': form.fields['file'].error_messages['file_too_large_unknown_size'], 'error_accepted_file_types': form.fields['file'].error_messages['invalid_image'], 'collections': collections_to_choose, })
def add(request): Document = get_document_model() DocumentForm = get_document_form(Document) DocumentMultiForm = get_document_multi_form(Document) collections = permission_policy.collections_user_has_permission_for(request.user, 'add') if len(collections) > 1: collections_to_choose = Collection.order_for_display(collections) else: # no need to show a collections chooser collections_to_choose = None if request.method == 'POST': 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['files[]'].name, 'collection': request.POST.get('collection'), }, { 'file': request.FILES['files[]'] }, user=request.user) if form.is_valid(): # Save it doc = form.save(commit=False) 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() # Success! Send back an edit form for this document to the user return JsonResponse({ 'success': True, 'doc_id': int(doc.id), 'form': render_to_string('wagtaildocs/multiple/edit_form.html', { 'doc': doc, 'form': DocumentMultiForm( instance=doc, prefix='doc-%d' % doc.id, user=request.user ), }, request=request), }) 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()]), }) else: form = DocumentForm(user=request.user) return render(request, 'wagtaildocs/multiple/add.html', { 'help_text': form.fields['file'].help_text, 'collections': collections_to_choose, })
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) 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 render(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 = Collection.objects.all() if len(collections) < 2: collections = None else: collections = Collection.order_for_display(collections) 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 add(request): Document = get_document_model() DocumentForm = get_document_form(Document) DocumentMultiForm = get_document_multi_form(Document) collections = permission_policy.collections_user_has_permission_for( request.user, 'add') if len(collections) > 1: collections_to_choose = Collection.order_for_display(collections) else: # no need to show a collections chooser collections_to_choose = None if request.method == 'POST': 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['files[]'].name, 'collection': request.POST.get('collection'), }, {'file': request.FILES['files[]']}, user=request.user) if form.is_valid(): # Save it doc = form.save(commit=False) 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() # Success! Send back an edit form for this document to the user return JsonResponse({ 'success': True, 'doc_id': int(doc.id), 'form': render_to_string('wagtaildocs/multiple/edit_form.html', { 'doc': doc, 'form': DocumentMultiForm(instance=doc, prefix='doc-%d' % doc.id, user=request.user), }, request=request), }) 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_str(i) for i in v]) for k, v in form.errors.items() ]), }) else: form = DocumentForm(user=request.user) return render( request, 'wagtaildocs/multiple/add.html', { 'help_text': form.fields['file'].help_text, 'collections': collections_to_choose, })
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) 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, documents = paginate(request, documents, per_page=10) return render( 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 = Collection.objects.all() if len(collections) < 2: collections = None else: collections = Collection.order_for_display(collections) documents = documents.order_by('-created_at') documents_exist = documents.exists() paginator, documents = paginate(request, documents, per_page=10) 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 add(request): mediaPath = os.path.dirname( os.path.dirname(os.path.dirname( os.path.dirname(__file__)))) + '/media/original_images' Image = get_image_model() ImageForm = get_image_form(Image) collections = permission_policy.collections_user_has_permission_for( request.user, 'add') if len(collections) > 1: collections_to_choose = Collection.order_for_display(collections) else: # no need to show a collections chooser collections_to_choose = None if request.method == 'POST': 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 = ImageForm( { 'title': request.FILES['files[]'].name, 'collection': request.POST.get('collection'), }, { 'file': request.FILES['files[]'], }, user=request.user) if form.is_valid(): # Save it image = form.save(commit=False) image.uploaded_by_user = request.user image.file_size = image.file.size image.file.seek(0) image._set_file_hash(image.file.read()) image.file.seek(0) # 在已经上传的txt中寻找与该图像ClothCode相同且最新上传的,否则提示错误 clothCode = str(request.FILES['files[]'].name)[0:6] try: doc = Document.objects.get(ClothCode=clothCode) image.BatchNum = doc.BatchNum image.Specs = doc.Specs image.ClothCode = doc.ClothCode except ObjectDoesNotExist: return JsonResponse({ 'success': False, # https://github.com/django/django/blob/stable/1.6.x/django/forms/util.py#L45 'error_message': "未上传该图片对应说明文档(同名)" }) image.save() # Success! Send back an edit form for this image to the user return JsonResponse({ 'success': True, 'image_id': int(image.id), 'form': render_to_string('wagtailimages/multiple/edit_form.html', { 'image': image, 'form': get_image_edit_form(Image)(instance=image, prefix='image-%d' % image.id, user=request.user), }, request=request), }) 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() ]), }) else: form = ImageForm(user=request.user) return render( request, 'wagtailimages/multiple/add.html', { 'max_filesize': form.fields['file'].max_upload_size, 'help_text': form.fields['file'].help_text, 'allowed_extensions': ALLOWED_EXTENSIONS, 'error_max_file_size': form.fields['file'].error_messages['file_too_large_unknown_size'], 'error_accepted_file_types': form.fields['file'].error_messages['invalid_image'], 'collections': collections_to_choose, })
def index(request): Document = get_document_model() # Get documents (filtered by user permission) documents = permission_policy.instances_user_has_any_permission_for( request.user, ['change', 'delete'] ) # Ordering if 'ordering' in request.GET and request.GET['ordering'] in ['title', '-created_at']: ordering = request.GET['ordering'] else: ordering = '-created_at' documents = documents.order_by(ordering) # Filter by collection current_collection = None collection_id = request.GET.get('collection_id') if collection_id: try: current_collection = Collection.objects.get(id=collection_id) documents = documents.filter(collection=current_collection) except (ValueError, Collection.DoesNotExist): pass # Search query_string = None if 'q' in request.GET: form = SearchForm(request.GET, placeholder=_("Search documents")) if form.is_valid(): query_string = form.cleaned_data['q'] documents = documents.search(query_string) else: form = SearchForm(placeholder=_("Search documents")) # Pagination paginator = Paginator(documents, per_page=20) documents = paginator.get_page(request.GET.get('p')) 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) # Create response if request.is_ajax(): return render(request, 'wagtaildocs/documents/results.html', { 'ordering': ordering, 'documents': documents, 'query_string': query_string, 'is_searching': bool(query_string), }) else: return render(request, 'wagtaildocs/documents/index.html', { 'ordering': ordering, 'documents': documents, 'query_string': query_string, 'is_searching': bool(query_string), 'search_form': form, 'popular_tags': popular_tags_for_model(Document), 'user_can_add': permission_policy.user_has_permission(request.user, 'add'), 'collections': collections, 'current_collection': current_collection, })
def add(request): Image = get_image_model() ImageForm = get_image_form(Image) collections = permission_policy.collections_user_has_permission_for(request.user, 'add') if len(collections) > 1: collections_to_choose = Collection.order_for_display(collections) else: # no need to show a collections chooser collections_to_choose = None if request.method == 'POST': 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 = ImageForm({ 'title': request.FILES['files[]'].name, 'collection': request.POST.get('collection'), }, { 'file': request.FILES['files[]'], }, user=request.user) if form.is_valid(): # Save it image = form.save(commit=False) image.uploaded_by_user = request.user image.file_size = image.file.size image.file.seek(0) image._set_file_hash(image.file.read()) image.file.seek(0) image.save() # Success! Send back an edit form for this image to the user return JsonResponse({ 'success': True, 'image_id': int(image.id), 'form': render_to_string('wagtailimages/multiple/edit_form.html', { 'image': image, 'edit_action': reverse('wagtailimages:edit_multiple', args=(image.id,)), 'delete_action': reverse('wagtailimages:delete_multiple', args=(image.id,)), 'form': get_image_edit_form(Image)( instance=image, prefix='image-%d' % image.id, user=request.user ), }, request=request), }) elif 'file' in form.errors: # The uploaded file is invalid; reject it now return JsonResponse({ 'success': False, 'error_message': '\n'.join(form.errors['file']), }) else: # Some other field of the image form has failed validation, e.g. a required metadata field # on a custom image model. Store the image as an UploadedImage instead and present the # edit form so that it will become a proper Image when successfully filled in uploaded_image = UploadedImage.objects.create( file=request.FILES['files[]'], uploaded_by_user=request.user ) image = Image(title=request.FILES['files[]'].name, collection_id=request.POST.get('collection')) return JsonResponse({ 'success': True, 'uploaded_image_id': uploaded_image.id, 'form': render_to_string('wagtailimages/multiple/edit_form.html', { 'uploaded_image': uploaded_image, 'edit_action': reverse('wagtailimages:create_multiple_from_uploaded_image', args=(uploaded_image.id,)), 'delete_action': reverse('wagtailimages:delete_upload_multiple', args=(uploaded_image.id,)), 'form': get_image_edit_form(Image)( instance=image, prefix='uploaded-image-%d' % uploaded_image.id, user=request.user ), }, request=request), }) else: # Instantiate a dummy copy of the form that we can retrieve validation messages and media from; # actual rendering of forms will happen on AJAX POST rather than here form = ImageForm(user=request.user) return TemplateResponse(request, 'wagtailimages/multiple/add.html', { 'max_filesize': form.fields['file'].max_upload_size, 'help_text': form.fields['file'].help_text, 'allowed_extensions': ALLOWED_EXTENSIONS, 'error_max_file_size': form.fields['file'].error_messages['file_too_large_unknown_size'], 'error_accepted_file_types': form.fields['file'].error_messages['invalid_image_extension'], 'collections': collections_to_choose, 'form_media': form.media, })
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 add(request): Image = get_image_model() ImageForm = get_image_form(Image) collections = permission_policy.collections_user_has_permission_for( request.user, 'add') if len(collections) > 1: collections_to_choose = Collection.order_for_display(collections) else: # no need to show a collections chooser collections_to_choose = None if request.method == 'POST': 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 = ImageForm( { 'title': request.FILES['files[]'].name, 'collection': request.POST.get('collection'), }, { 'file': request.FILES['files[]'], }, user=request.user) if form.is_valid(): # Save it image = form.save(commit=False) image.uploaded_by_user = request.user image.file_size = image.file.size image.file.seek(0) image._set_file_hash(image.file.read()) image.file.seek(0) image.save() # Success! Send back an edit form for this image to the user return JsonResponse({ 'success': True, 'image_id': int(image.id), 'form': render_to_string('wagtailimages/multiple/edit_form.html', { 'image': image, 'form': get_image_edit_form(Image)(instance=image, prefix='image-%d' % image.id, user=request.user), }, request=request), }) 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_str(i) for i in v]) for k, v in form.errors.items() ]), }) else: # Instantiate a dummy copy of the form that we can retrieve validation messages and media from; # actual rendering of forms will happen on AJAX POST rather than here form = ImageForm(user=request.user) return render( request, 'wagtailimages/multiple/add.html', { 'max_filesize': form.fields['file'].max_upload_size, 'help_text': form.fields['file'].help_text, 'allowed_extensions': ALLOWED_EXTENSIONS, 'error_max_file_size': form.fields['file']. error_messages['file_too_large_unknown_size'], 'error_accepted_file_types': form.fields['file'].error_messages['invalid_image'], 'collections': collections_to_choose, 'form_media': form.media, })
def import_from_drive(request): if not can_import(request.user): raise PermissionDenied collections = permission_policy.collections_user_has_permission_for( request.user, "add") collections_to_choose = json.dumps([ (collection.id, collection.name) for collection in Collection.order_for_display(collections) ]) Image = get_image_model() ImageForm = get_image_form(Image) if request.method == "POST": # Build a form for validation wagtail_id = request.POST.get("wagtail_id") if request.POST["action"] == "replace" and wagtail_id: existing_image = get_image_model().objects.get(pk=wagtail_id) form = ImageForm( { "title": existing_image.title, "collection": existing_image.collection.id, }, { "file": request.FILES["image_file"], }, user=request.user, instance=existing_image, ) else: form = ImageForm( { "title": request.POST.get("name", ""), "collection": request.POST.get("collection"), }, { "file": request.FILES["image_file"], }, user=request.user, ) if form.is_valid(): # Save it image = form.save(commit=False) image.uploaded_by_user = request.user image.file_size = image.file.size image.file.seek(0) image._set_file_hash(image.file.read()) image.file.seek(0) image.save() drive_id = request.POST.get("drive_id") if drive_id: DriveIDMapping.objects.update_or_create( image=image, defaults={"drive_id": drive_id}) # Success! Send back an edit form for this image to the user return JsonResponse({ "success": True, "image_id": int(image.id), "edit_action": reverse("wagtail_image_import:edit", args=(image.id, )), "delete_action": reverse("wagtailimages:delete_multiple", args=(image.id, )), "form": render_to_string( "wagtail_image_import/edit_form.html", { "image": image, "form": get_image_edit_form(Image)( instance=image, prefix="image-%d" % image.id, user=request.user, ), }, request=request, ), }) elif "file" in form.errors: # The uploaded file is invalid; reject it now return JsonResponse({ "success": False, "error": "\n".join(form.errors["file"]), }) else: # Some other field of the image form has failed validation, e.g. a required metadata field # on a custom image model. Store the image as an UploadedImage instead and present the # edit form so that it will become a proper Image when successfully filled in uploaded_image = UploadedImage.objects.create( file=request.FILES["image_file"], uploaded_by_user=request.user) image = Image( title=request.POST.get("name", ""), collection_id=request.POST.get("collection"), ) return JsonResponse({ "error": "The image was uploaded, but needs additional input to be saved. Errors: " + "\n".join([ field + ": " + error for field, error_list in form.errors.items() for error in error_list ]), "success": True, "uploaded_image_id": uploaded_image.id, "edit_action": reverse( "wagtail_image_import:create_from_uploaded_image", args=(uploaded_image.id, ), ), "delete_action": reverse( "wagtailimages:delete_upload_multiple", args=(uploaded_image.id, ), ), "form": render_to_string( "wagtail_image_import/edit_form.html", { "uploaded_image": uploaded_image, "form": get_image_edit_form(Image)( instance=image, prefix="uploaded-image-%d" % uploaded_image.id, user=request.user, ), }, request=request, ), }) # manually set the Google picker parent folder if a function is provided drive_parent_finder = getattr( settings, "WAGTAILIMAGEIMPORT_SET_DRIVE_PARENT_FUNCTION", "") drive_parent = (import_string(drive_parent_finder)(request) if drive_parent_finder else "root") client_secret = json.loads( settings.WAGTAILIMAGEIMPORT_GOOGLE_OAUTH_CLIENT_SECRET) context = { "app_id": client_secret["web"]["project_id"], "client_id": client_secret["web"]["client_id"], "picker_api_key": settings.WAGTAILIMAGEIMPORT_GOOGLE_PICKER_API_KEY, "collections": collections_to_choose, "drive_parent": drive_parent, } return render(request, "wagtail_image_import/import.html", context=context)
def add(request): # 定义字典确定产品规格 dic1 = {'L': "临时品种", 'X': "打样品种", 'C': "常规品种"} dic2 = {'N': "尼丝纺", 'T': "塔丝隆", 'P': "春亚纺", 'S': "桃皮绒", 'J': "锦涤纺", 'R': "麂皮绒", 'D': "涤塔夫", 'Q': "其它品种"} dic3 = {'T': "平纹", 'W': "斜纹", 'B': "格子", 'S': "缎纹"} # 路径 mediaPath = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) + '/media/documents' Document = get_document_model() DocumentForm = get_document_form(Document) DocumentMultiForm = get_document_multi_form(Document) collections = permission_policy.collections_user_has_permission_for(request.user, 'add') if len(collections) > 1: collections_to_choose = Collection.order_for_display(collections) else: # no need to show a collections chooser collections_to_choose = None if request.method == 'POST': 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 print(request.FILES['files[]'].name) form = DocumentForm({ 'title': request.FILES['files[]'].name, 'collection': request.POST.get('collection'), }, { 'file': request.FILES['files[]'] }, user=request.user) if form.is_valid(): # Save it print(333) doc = form.save(commit=False) 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) # set BatchNum,Specs doc.file.readline() doc.Info = str(doc.file.readline()) line = doc.Info # 提取line中的产品规格及产品批号 specs = dic1.get(line[2], "XXXX") + "--" + dic2.get(line[3], "XXXX") + "--" + dic3.get(line[4], "XXXX") batchNum = line[5:11] clothCode = str(request.FILES['files[]'])[0:6] doc.BatchNum = batchNum doc.Specs = specs doc.ClothCode = clothCode doc.save() # Success! Send back an edit form for this document to the user return JsonResponse({ 'success': True, 'doc_id': int(doc.id), 'form': render_to_string('wagtaildocs/multiple/edit_form.html', { 'doc': doc, 'form': DocumentMultiForm( instance=doc, prefix='doc-%d' % doc.id, user=request.user ), }, request=request), }) else: # Validation error print(222) 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()]), }) else: form = DocumentForm(user=request.user) return render(request, 'wagtaildocs/multiple/add.html', { 'help_text': form.fields['file'].help_text, 'collections': collections_to_choose, })