import json import pydash as _; _.map = _.map_; _.filter = _.filter_ from pprint import pprint, pformat from django.shortcuts import render, redirect from django.contrib import messages from django.core.urlresolvers import reverse from django.http import JsonResponse, HttpResponse from django.core.files.base import ContentFile from django.views.generic import ListView, DetailView, CreateView, View, \ UpdateView, DeleteView, TemplateView from projects.models import BuildingClassfication, ConstructionType from .models import WorkSell, Picture, WorkSellPhoto from .forms import WorkSellForm, ContractorWorkSellTrashForm from .serialize import serialize from .response import JSONResponse, response_mimetype class PictureCreateView(CreateView): model = Picture fields = '__all__' def form_valid(self, form): self.object = form.save() files = [serialize(self.object)] data = {'files': files} response = JSONResponse(data, mimetype=response_mimetype(self.request)) response['Content-Disposition'] = 'inline; filename=files.json' return response def form_invalid(self, form): data = json.dumps(form.errors) return HttpResponse(content=data, status=400, content_type='application/json') class BasicCreateView(PictureCreateView): template_name = 'picture_basic_form.html' class WorkSellsView(ListView): model = WorkSell template_name = 'worksells_list.html' # paginate_by = 20 paginate_by = 18 def get_form_kwargs(self, **kwargs): kwargs = super().get_form_kwargs def get_queryset(self, **kwargs): qs = WorkSell.objects.all() # if self.request.GET: # budget_from = self.request.GET # pass return qs def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['building_classifications'] = BuildingClassfication.objects.all() context['construction_types'] = ConstructionType.objects.all() return context class WorkSellDetail(DetailView): model = WorkSell template_name = 'worksell_detail.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['worksell_related'] = WorkSell.objects.exclude(pk=self.get_object().pk)[:5] return context def work_sell_create(request): if request.is_ajax(): form = WorkSellForm(data=request.POST) if form.is_valid(): instance = form.save(commit=False) instance.save() images_ids = request.POST.get('images-ids').split(';')[:-1] for pk in images_ids: picture = Picture.objects.get(pk=pk) temp_file = ContentFile(picture.file.read()) temp_file.name = picture.file.name w_photo = WorkSellPhoto() w_photo.img = temp_file w_photo.worksell = instance w_photo.save() data = {'status': 'ok'} else: data = {'status': 'no', 'form_errors': form.errors} return HttpResponse(json.dumps(data), content_type='application/json') class WorkSellCreateView(CreateView): model = WorkSell form_class = WorkSellForm template_name = 'worksell_create.html' class WorkSellUpdateView(UpdateView): model = WorkSell form_class = WorkSellForm template_name = 'worksell_edit.html' def get_success_url(self): return reverse('work_sell:list') class WorkSellDeleteView(DeleteView): model = WorkSell template_name = 'worksell_delete.html' def get_success_url(self): return reverse('work_sell:list') class ContractorWorkSellTrashView(View): form_class = ContractorWorkSellTrashForm def post(self, request, *args, **kwargs): form = self.form_class(_.merge({}, request.POST, kwargs), request=request) if form.is_valid(): worksell = form.cleaned_data.get('pk') worksell.delete() messages.info(request, 'Готовая работа удалена') else: messages.info(request, 'Произошла ошибка:
{msg}
'.format(msg=pformat(form.errors))) redirect_to = request.POST.get('next') return redirect(redirect_to) class UploadView(View): template_name = 'upload.html' def get(self, request, *args, **kwargs): return render(request, self.template_name) class JSONResponseMixin(object): def render_to_json_response(self, context, **response_kwargs): return JsonResponse( self.get_data(context), **response_kwargs ) def get_data(self, context): context = {'test': 'data'} return context class JSONView(JSONResponseMixin, TemplateView): def render_to_response(self, context, **response_kwargs): return self.render_to_json_response(context, **response_kwargs)