-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdependent_options.py
More file actions
74 lines (65 loc) · 2.54 KB
/
dependent_options.py
File metadata and controls
74 lines (65 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""
Ejemplo de opciones dependientes con DependentOptionsConfig.
Demuestra cómo definir campos cuyos opciones cambian según el valor
de otro campo (por ejemplo, país → ciudades).
"""
from codeforms import (
DependentOptionsConfig,
Form,
SelectField,
SelectOption,
)
def create_location_form() -> Form:
"""Crea un formulario con ciudades dependientes del país seleccionado."""
return Form(
name="location_form",
fields=[
SelectField(
name="country",
label="Country",
required=True,
options=[
SelectOption(value="US", label="United States"),
SelectOption(value="AR", label="Argentina"),
],
),
SelectField(
name="city",
label="City",
required=True,
# Opciones estáticas (todas las ciudades posibles para HTML rendering)
options=[
SelectOption(value="nyc", label="New York City"),
SelectOption(value="la", label="Los Angeles"),
SelectOption(value="bsas", label="Buenos Aires"),
SelectOption(value="cor", label="Córdoba"),
],
# Metadata de dependencia (para lógica dinámica en frontend o backend)
dependent_options=DependentOptionsConfig(
depends_on="country",
options_map={
"US": [
SelectOption(value="nyc", label="New York City"),
SelectOption(value="la", label="Los Angeles"),
],
"AR": [
SelectOption(value="bsas", label="Buenos Aires"),
SelectOption(value="cor", label="Córdoba"),
],
},
),
),
],
)
if __name__ == "__main__":
form = create_location_form()
# La metadata de dependencia se serializa a JSON
import json
data = json.loads(form.model_dump_json(exclude_none=True))
city_field = data["content"][1]
print("City field dependent_options:")
print(json.dumps(city_field["dependent_options"], indent=2))
# Las opciones específicas para cada país
dep = form.fields[1].dependent_options
print(f"\nOptions for US: {[o.label for o in dep.options_map['US']]}")
print(f"Options for AR: {[o.label for o in dep.options_map['AR']]}")