#custom views from city.models import City from country.models import Country from django.conf import settings from django.contrib.auth.decorators import login_required from django.core.context_processors import csrf from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import get_object_or_404, render_to_response, render from django.views.generic import DeleteView, FormView, ListView, UpdateView from forms import ServiceDeleteForm, ServiceForm from functions.custom_views import delete_object, objects_list # -*- coding: utf-8 -*- #models and forms from models import Service from .forms import LinkedServiceForm from .models import LinkedService def service_all(request): """ return list of all services with pagination """ return objects_list(request, Service, 'service_all.html') def service_delete(request, url): return delete_object(request, Service, ServiceDeleteForm, url, '/admin/service/all') @login_required def service_change(request, url): service = get_object_or_404(Service, url=url) # initial data data = { 'price': service.price, 'currency': service.currency, 'template': service.template, 'type': service.type, } #countries sorted by this service #services_in_countries = Country.objects.filter(services=getattr(Country.services, str(service_id))) #data['europa'] = services_in_countries #data['asia'] = services_in_countries #data['africa'] = services_in_countries #data['america'] = services_in_countries #hidden field data['url'] = service.url #data from translated fields for code, name in settings.LANGUAGES: obj = Service._meta.translations_model.objects.get(language_code = code, master__id=service.pk) #access to translated fields data['name_%s'%code] = obj.name data['description_%s'%code] = obj.description data['main_title_%s'%code] = obj.main_title data['advantage_%s'%code] = obj.advantage data['title_%s'%code] = obj.title data['keywords_%s'%code] = obj.keywords data['descriptions_%s'%code] = obj.descriptions form = ServiceForm(request.POST or None, initial=data, instance=service) if request.POST: #form.fields['city'].choices = [(item.id, item.name) for item in City.objects.all()] if form.is_valid(): form.save() return HttpResponseRedirect('/admin/service/all') args = {} args['form'] = form args['languages'] = settings.LANGUAGES return render(request, 'service_add.html', args) @login_required def service_add(request): if request.POST: form = ServiceForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect('/admin/service/all') else: form = ServiceForm() args = {} args.update(csrf(request)) args['form'] = form args['languages'] = settings.LANGUAGES return render_to_response('service_add.html', args) """ def get_country(request): if request.GET: #country_region = request.GET['region'] #countries = Country.objects.filter(region=country_region) return render_to_response('checkbox_option.html', {'options': countries}) else: return HttpResponse('error') """ def get_city(request): if request.GET: country_id = request.GET['id'] cities = City.objects.filter(country=country_id) return render_to_response('checkbox_option.html', {'options': cities}) else: return HttpResponse('error') class LinkedServiceUpdateView(UpdateView): form_class = LinkedServiceForm model = LinkedService template_name = "c_admin/service/linked_service.html" success_url = "/admin/service/control/all/" def get_object(self, queryset=None): url = self.kwargs['url'] service = get_object_or_404(Service, url=url) obj = LinkedService.objects.get(service=service) return obj def get_initial(self): types = {0:[], 1:['expo'], 2:['conference'], 3:['expo', 'conference']} initial = { 'expositions': ",".join("%s:%s"%(item.id, item.name) for item in self.object.expositions.all()), 'conferences': ",".join("%s:%s"%(item.id, item.name) for item in self.object.conferences.all()), 'exclude_expositions': ",".join("%s:%s"%(item.id, item.name) for item in self.object.exclude_expositions.all()), 'exclude_conferences': ",".join("%s:%s"%(item.id, item.name) for item in self.object.exclude_conferences.all()), 'type': types[self.object.service.type.mask] } return initial def get_success_url(self): return self.success_url def form_valid(self, form): obj = form.save() obj.countries = form.cleaned_data['countries'] # obj.expositions_diff = set(obj.expositions.all().values_list('pk', flat=True)).difference(set(form.cleaned_data['expositions'].values_list('pk', flat=True))) obj.expositions = form.cleaned_data['expositions'] # obj.conferences_diff = set(obj.conferences.all().values_list('pk', flat=True)).difference(set(form.cleaned_data['conferences'].values_list('pk', flat=True))) obj.conferences = form.cleaned_data['conferences'] # obj.exclude_expositions_diff = set(obj.exclude_expositions.all().values_list('pk', flat=True)).difference(set(form.cleaned_data['exclude_expositions'].values_list('pk', flat=True))) obj.exclude_expositions = form.cleaned_data['exclude_expositions'] # obj.exclude_conferences_diff = set(obj.exclude_conferences.all().values_list('pk', flat=True)).difference(set(form.cleaned_data['exclude_conferences'].values_list('pk', flat=True))) obj.exclude_conferences = form.cleaned_data['exclude_conferences'] obj.save() obj.update_all_flags() return HttpResponseRedirect(self.get_success_url()) class LinkedServiceList(ListView): model = LinkedService template_name = 'c_admin/service/linked_service_list.html' class LinkedServiceDeleteView(DeleteView): model = LinkedService template_name = 'c_admin/service/linked_service_confirm_delete.html' success_url = '/admin/service/test/all' slug_url_kwarg = 'url' def get_object(self, queryset=None): url = self.kwargs['url'] service = get_object_or_404(Service, url=url) obj = LinkedService.objects.get(service=service) return obj