The lino_xl.lib.statbel.countries plugin

A tested document

This is a tested document. The following instructions are used for initialization:

>>> from lino import startup
>>> startup('lino_welfare.projects.gerd.settings.doctests')
>>> from lino.api.doctest import *
>>> from django.db.models import Q
>>> dd.plugins.countries
lino_xl.lib.statbel.countries (extends_models=['Country', 'Place'])

Refugee statuses and former country

The demo database comes with 270 known countries, but some of them are not real countries because actually represent for example a refugee status or a former country.

Lino knows them because their actual_country field points to another (the “real”) country.

>>> countries.Country.objects.all().count()
270
>>> countries.Country.objects.filter(actual_country__isnull=True).count()
266
>>> countries.Country.objects.filter(actual_country__isnull=False).count()
4
>>> rt.show(countries.Countries,
...     filter=Q(actual_country__isnull=False),
...     column_names="isocode name inscode actual_country actual_country__isocode")
========== ============================================ ========== ====================== ==========
 ISO-Code   Bezeichnung                                  INS code   Actual country         ISO-Code
---------- -------------------------------------------- ---------- ---------------------- ----------
 BYAA       Byelorussian SSR Soviet Socialist Republic              Belarus                BY
 DDDE       German Democratic Republic                   170        Deutschland            DE
 DEDE       German Federal Republic                      103        Deutschland            DE
 SUHH       USSR, Union of Soviet Socialist Republics               Russische Föderation   RU
========== ============================================ ========== ====================== ==========

The following database fields refer to a country:

  • Partner country

  • Place country

>>> for m, f in rt.models.countries.Country._lino_ddh.fklist:
...     print ("{} {}".format(dd.full_model_name(m), f.name))
addresses.Address country
contacts.Partner country
countries.Country actual_country
countries.Place country
cv.Experience country
cv.Study country
cv.Training country
pcsw.Client birth_country
pcsw.Client nationality
>>> kw = dict()
>>> fields = 'count rows'
>>> demo_get(
...    'rolf', 'choices/addresses/Address/country', fields, 266, **kw)
>>> demo_get(
...    'rolf', 'choices/contacts/Partners/country', fields, 266, **kw)
>>> demo_get(
...    'rolf', 'choices/pcsw/Clients/country', fields, 266, **kw)
>>> demo_get(
...    'rolf', 'choices/countries/Countries/actual_country', fields, 266, **kw)
>>> demo_get(
...    'rolf', 'choices/cv/Training/country', fields, 266, **kw)

The following fields have the full list, including fake countries)

>>> demo_get(
...    'rolf', 'choices/pcsw/Clients/nationality', fields, 270, **kw)
>>> demo_get(
...    'rolf', 'choices/countries/Places/country', fields, 270, **kw)