@@ -190,14 +190,27 @@ class MultiplePatchForm(forms.Form):
190190 empty_value = '*' ,
191191 )
192192
193- def __init__ (self , project , * args , ** kwargs ):
193+ def __init__ (self , project , user = None , * args , ** kwargs ):
194194 super (MultiplePatchForm , self ).__init__ (* args , ** kwargs )
195195 self .fields ['delegate' ] = OptionalModelChoiceField (
196196 queryset = _get_delegate_qs (project = project ), required = False
197197 )
198198 self .fields ['state' ] = OptionalModelChoiceField (
199199 queryset = State .objects .all ()
200200 )
201+ self .user = user
202+ if self .user :
203+ self .fields ['declare_interest' ] = OptionalBooleanField (
204+ choices = [
205+ ('*' , 'no change' ),
206+ ('True' , 'Interested' ),
207+ ('False' , 'Not interested' ),
208+ ],
209+ coerce = lambda x : x == 'True' ,
210+ empty_value = '*' ,
211+ required = False ,
212+ initial = '*' ,
213+ )
201214
202215 def save (self , instance , commit = True ):
203216 opts = instance .__class__ ._meta
@@ -219,8 +232,27 @@ def save(self, instance, commit=True):
219232 if field .is_no_change (data [f .name ]):
220233 continue
221234
235+ if f .name == 'declare_interest' :
236+ if data [f .name ]:
237+ self .instance .interested_users .add (self .user )
238+ else :
239+ self .instance .interested_users .remove (self .user )
240+ continue
241+
222242 setattr (instance , f .name , data [f .name ])
223243
224244 if commit :
225245 instance .save ()
226246 return instance
247+
248+ def declare_interest_only (self ):
249+ interest_only = True
250+ field_names = set (self .fields .keys ())
251+ field_names .discard ({'declare_interest' , 'action' })
252+
253+ for field_name in field_names :
254+ data = self .data .get (field_name , '*' )
255+ if data != '*' :
256+ interest_only = False
257+
258+ return interest_only
0 commit comments