Skip to content

Commit 7940123

Browse files
committed
check year, fix
1 parent d9f7294 commit 7940123

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

apps/sponsors/manage/forms.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,16 @@ def __init__(self, *args, **kwargs):
8484
choices=[("", "---"), *year_choices()],
8585
attrs={"style": "padding:8px 12px;border:1px solid #ccc;border-radius:4px;font-size:14px;"},
8686
)
87-
# Filter packages to benefit's year, or initial year, or current year
87+
# Filter packages to bound year, instance year, initial year, or current year
8888
filter_year = None
89-
if self.instance and self.instance.year:
89+
if self.is_bound and self.data.get("year"):
90+
with contextlib.suppress(ValueError):
91+
filter_year = int(self.data["year"])
92+
if not filter_year and self.instance and self.instance.year:
9093
filter_year = self.instance.year
91-
elif self.initial.get("year"):
94+
elif not filter_year and self.initial.get("year"):
9295
filter_year = self.initial["year"]
93-
else:
96+
if not filter_year:
9497
with contextlib.suppress(SponsorshipCurrentYear.DoesNotExist):
9598
filter_year = SponsorshipCurrentYear.get_year()
9699
if filter_year:
@@ -298,8 +301,9 @@ def __init__(self, *args, **kwargs):
298301
"""Initialize form with year-filtered packages."""
299302
super().__init__(*args, **kwargs)
300303
# Filter packages to the sponsorship's year
301-
if self.instance and self.instance.year:
302-
self.fields["package"].queryset = SponsorshipPackage.objects.filter(year=self.instance.year).order_by(
304+
filter_year = self.instance.year if self.instance else None
305+
if filter_year:
306+
self.fields["package"].queryset = SponsorshipPackage.objects.filter(year=filter_year).order_by(
303307
"-sponsorship_amount"
304308
)
305309

@@ -341,9 +345,15 @@ class Meta:
341345
def __init__(self, *args, **kwargs):
342346
"""Initialize form with year-filtered packages."""
343347
super().__init__(*args, **kwargs)
344-
# Filter packages to the sponsorship's year
345-
if self.instance and self.instance.year:
346-
self.fields["package"].queryset = SponsorshipPackage.objects.filter(year=self.instance.year).order_by(
348+
# Filter packages to bound year first (allows changing year + package together)
349+
filter_year = None
350+
if self.is_bound and self.data.get("year"):
351+
with contextlib.suppress(ValueError):
352+
filter_year = int(self.data["year"])
353+
if not filter_year and self.instance and self.instance.year:
354+
filter_year = self.instance.year
355+
if filter_year:
356+
self.fields["package"].queryset = SponsorshipPackage.objects.filter(year=filter_year).order_by(
347357
"-sponsorship_amount"
348358
)
349359

0 commit comments

Comments
 (0)