ipg/apps/pg/forms.py
2026-04-22 19:51:36 +03:30

51 lines
1.7 KiB
Python

from django import forms
from .models import PaymentRequest, GatewayChoise
class PaymentRequestForm(forms.ModelForm):
class Meta:
model = PaymentRequest
fields = []
class DelimitedListField(forms.MultipleChoiceField):
"""
Django form field that allows for the use of list widgets with a text field
containing a delimited list.
"""
delimiter = ','
def __init__(self, delimiter=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.delimiter = delimiter or self.delimiter
def prepare_value(self, value):
# If the value is already a list or tuple, just use it as-is
if isinstance(value, (list, tuple)): return value
# Otherwise, prepare the value by splitting on the delimiter, trimming
# leading and trailing whitespace and excluding empty values
return [p.strip() for p in value.split(self.delimiter) if p.strip()]
def clean(self, value):
# Let the parent clean the value first, then join the result using the
# specified delimiter
return self.delimiter.join(super().clean(value))
class ApplicationGatewayPolicyForm(forms.ModelForm):
"""
Form for creating or updating a restricted application.
"""
# allowed_scope is a space-delimited list, but we want to present
# a selection of valid scopes with checkboxes
preferred_gateways = DelimitedListField(
label='preferred gateways',
# The choices and initial values are callables, because the scopes might
# not be available at import type, e.g. if coming from the database
choices=GatewayChoise.choices,
initial=GatewayChoise.choices,
delimiter=' ',
widget=forms.CheckboxSelectMultiple
)