Changeset View
Changeset View
Standalone View
Standalone View
looper/form_fields.py
| from typing import Any, Mapping, Optional, Union | from typing import Any, Mapping, Optional, Union | ||||
| from django import forms | from django import forms | ||||
| from django.db.models import Model | |||||
| from django.forms import NumberInput | from django.forms import NumberInput | ||||
| from looper.money import Money | from looper.money import Money | ||||
| class MoneyInput(NumberInput): | class MoneyInput(NumberInput): | ||||
| def __init__(self, attrs: Optional[dict] = None) -> None: | def __init__(self, attrs: Optional[Mapping[str, str]] = None) -> None: | ||||
| super().__init__( | super().__init__( | ||||
| { | { | ||||
| 'placeholder': '123.45', | 'placeholder': '123.45', | ||||
| **(attrs or {}), | **(attrs or {}), | ||||
| } | } | ||||
| ) | ) | ||||
| ▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | |||||
| class GatewayChoiceField(forms.ModelChoiceField): | class GatewayChoiceField(forms.ModelChoiceField): | ||||
| """ModelChoiceField for choosing a payment gateway. | """ModelChoiceField for choosing a payment gateway. | ||||
| Stores the gateway name in the field value. This allows JavaScript to know | Stores the gateway name in the field value. This allows JavaScript to know | ||||
| which gateway is selected without having to resort to hard-coding primary | which gateway is selected without having to resort to hard-coding primary | ||||
| keys. | keys. | ||||
| """ | """ | ||||
| def __init__(self, **kwargs) -> None: | def __init__(self, **kwargs: Any) -> None: | ||||
| from . import models | from looper import models | ||||
| kwargs.setdefault('empty_label', None) | kwargs.setdefault('empty_label', None) | ||||
| kwargs.setdefault('label', 'Payment method') | kwargs.setdefault('label', 'Payment method') | ||||
| kwargs.setdefault('queryset', models.Gateway.objects.all()) | kwargs.setdefault('queryset', models.Gateway.objects.all()) | ||||
| kwargs.setdefault('to_field_name', 'name') | kwargs.setdefault('to_field_name', 'name') | ||||
| kwargs.setdefault('widget', GatewayRadioSelect()) | kwargs.setdefault('widget', GatewayRadioSelect()) | ||||
| super().__init__(**kwargs) | super().__init__(**kwargs) | ||||
| def label_from_instance(self, obj) -> str: | def label_from_instance(self, obj: 'Model') -> str: | ||||
| from looper import models | |||||
| assert isinstance(obj, models.Gateway) | |||||
| return obj.frontend_name | return obj.frontend_name | ||||