Source code for pas.forms.parliamentarian_role
from __future__ import annotations
from onegov.form import move_fields
from onegov.form.fields import ChosenSelectField
from onegov.form.fields import TranslatedSelectField
from onegov.org.forms import ParliamentarianRoleForm
from onegov.parliament.models.parliamentarian_role import PARTY_ROLES
from onegov.pas import _
from onegov.pas.collections import PartyCollection
from typing import Any, TYPE_CHECKING
if TYPE_CHECKING:
from collections.abc import Collection
from onegov.pas.models import PASParliamentarianRole
class PASParliamentarianRoleForm(ParliamentarianRoleForm):
[docs]
party_role = TranslatedSelectField(
label=_('Party role'),
choices=list(PARTY_ROLES.items()),
default='none'
)
[docs]
def on_request(self) -> None:
super().on_request()
self.party_id.choices = [
(str(party.id), party.title)
for party
in PartyCollection(self.request.session).query()
]
self.party_id.choices.insert(0, ('', '-'))
[docs]
def populate_obj( # type: ignore[override]
self,
obj: PASParliamentarianRole, # type: ignore[override]
exclude: Collection[str] | None = None,
include: Collection[str] | None = None
) -> None:
super().populate_obj(
obj,
{'party_id', *(exclude or ())},
include
)
obj.party_id = self.party_id.data or None
[docs]
def get_useful_data(self) -> dict[str, Any]: # type:ignore[override]
result = super().get_useful_data()
result['party_id'] = result.get('party_id') or None
return result
if not TYPE_CHECKING:
# Move party field to correct location
[docs]
PASParliamentarianRoleForm = move_fields(
PASParliamentarianRoleForm,
('party_id', 'party_role'),
before='parliamentary_group_id'
)