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'
    )