Source code for language.views

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Nov  5 14:31:14 2018

@author: Paolo Cozzi <cozzi@ibba.cnr.it>
"""

import logging

from django.urls import reverse_lazy
from django.shortcuts import get_object_or_404
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import ListView, UpdateView

from uid.models import DictCountry

from .models import SpecieSynonym
from .forms import SpecieSynonymForm

# Get an instance of a logger
logger = logging.getLogger(__name__)


[docs]class CountryMixin(object): """Read country label from request get (if present) and add to context""" country = None # perform a join while getting queryset queryset = SpecieSynonym.objects.select_related("language", "dictspecie")
[docs] def get_queryset(self): """Read country if requested using GET method""" # call super method queryset = super(CountryMixin, self).get_queryset() # get country or none from a get request country = self.request.GET.get('country') if country: self.country = get_object_or_404( DictCountry, label=country) queryset = queryset.filter(language=self.country) return queryset
[docs] def get_context_data(self, **kwargs): """Add a dictcountry object to a context""" # Call the base implementation first to get a context context = super(CountryMixin, self).get_context_data(**kwargs) # Add my country attribute to context context['country'] = self.country return context
[docs]class ListSpeciesView(LoginRequiredMixin, CountryMixin, ListView): model = SpecieSynonym template_name = "language/speciesynonym_list.html" paginate_by = 10 ordering = ['word']
[docs]class UpdateSpeciesView(LoginRequiredMixin, CountryMixin, UpdateView): form_class = SpecieSynonymForm template_name = "language/speciesynonym_form.html" # https://stackoverflow.com/a/31275770/4385116 # You can't use reverse with success_url, because then reverse is # called when the module is imported, before the urls have been loaded. success_url = reverse_lazy("language:species")
[docs] def get_success_url(self): """Redirect to page if form is valid""" success_url = self.success_url if self.country: success_url += "?country={country}".format( country=self.country.label) return success_url