# -*- coding: utf-8 -*- from django.shortcuts import render_to_response from django.http import HttpResponseRedirect from django.core.context_processors import csrf from django.conf import settings from django.shortcuts import get_object_or_404 from django.contrib.contenttypes.models import ContentType #models and forms from models import Translator from translator.forms import TranslatorForm, TranslatorDeleteForm, TranslatorFilterForm, TranslatorUserForm, \ TranslatorUserProfileForm from file.forms import FileModelForm from file.models import FileModel from accounts.models import User #custom views from functions.custom_views import objects_list, delete_object, add_object_with_file from functions.admin_views import AdminListView def translator_all(request): return objects_list(request, Translator, 'translator_all.html') def translator_add(request): return add_object_with_file(request, TranslatorForm, 'translator_add.html', '/admin/translator/all/') def translator_delete(request, url): return delete_object(request, Translator, TranslatorDeleteForm, url, '/admin/translator/all/') from django.contrib import messages def translator_change(request, url): """ """ translator = Translator.objects.safe_get(id=url) if translator is None: return HttpResponseRedirect('/admin/translator/all/') translator_id = getattr(translator, 'id') file_form = FileModelForm(initial={'model': 'translator.Translator'}) if request.POST: form = TranslatorForm(request.POST) if form.is_valid(): form.save(translator_id) return HttpResponseRedirect('/admin/translator/all') else: #fill form with data from database data = {'car':translator.car, 'gender':translator.gender, 'birth':translator.birth} data['user'] = User.objects.safe_get(translator=translator) #data from translated fields for code, name in settings.LANGUAGES: obj = Translator._meta.translations_model.objects.get(language_code = code,master__id=translator_id) #access to translated fields data['education_%s' % code] = obj.education data['specialization_%s' % code] = obj.education data['languages_%s' % code] = obj.languages data['native_language_%s' % code] = obj.native_language data['prices_%s' % code] = obj.prices data['discounts_%s' % code] = obj.discounts data['title_%s' % code] = obj.title data['keywords_%s' % code] = obj.keywords data['descriptions_%s' % code] = obj.descriptions #initial form form = TranslatorForm(initial=data) args = {} args.update(csrf(request)) args['languages'] = settings.LANGUAGES args['form'] = form args['file_form'] = file_form #get list of files which connected with specific model object args['files'] = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(translator), object_id=getattr(translator, 'id')) #uses for creating hidden input which will be used for generating ajax url args['obj_id'] = translator_id return render_to_response('translator_add.html', args) class TranslatorListView(AdminListView): template_name = 'c_admin/translator/translator_list.html' form_class = TranslatorFilterForm model = Translator from django.views.generic import ListView, FormView class TranslatorList(ListView): model = User template_name = 'c_admin/translator/translator_list.html' paginate_by = 20 def get_queryset(self): return self.model.objects.select_related().filter(translator__isnull=False) class TranslatorAdminView(FormView): template_name = 'c_admin/translator/translator.html' def translator_edit(request, id): user = get_object_or_404(User, id=id) if request.POST: form_user = TranslatorUserForm(request.POST, instance=user) form_profile = TranslatorUserProfileForm(request.POST, request.FILES, instance=user.profile) form = TranslatorForm(request.POST) form_user_valid = form_user.is_valid() form_profile_valid = form_profile.is_valid() form_valid = form.is_valid() if form_profile_valid and form_user_valid and form_valid: form_user.save() form_profile.save() form.save(user.translator.id) return HttpResponseRedirect('/admin/translator/all/') else: form_user = TranslatorUserForm(instance=user) form_profile = TranslatorUserProfileForm(instance=user.profile) translator = user.translator data = {'car':translator.car, 'gender':translator.gender, 'birth':translator.birth} data['user'] = User.objects.safe_get(translator=translator) #data from translated fields for code, name in settings.LANGUAGES: obj = Translator._meta.translations_model.objects.get(language_code = code, master__id=translator.id) #access to translated fields data['education_%s' % code] = obj.education data['specialization_%s' % code] = obj.education data['languages_%s' % code] = obj.languages data['native_language_%s' % code] = obj.native_language data['prices_%s' % code] = obj.prices data['discounts_%s' % code] = obj.discounts form = TranslatorForm(initial=data) context = {} context.update(csrf(request)) context['object'] = user context['languages'] = settings.LANGUAGES context['form'] = form context['form_user'] = form_user context['form_profile'] = form_profile return render_to_response('c_admin/translator/translator.html', context)