@@ -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