@@ -198,6 +198,17 @@ def __init__(self, project, *args, **kwargs):
198198 self .fields ['state' ] = OptionalModelChoiceField (
199199 queryset = State .objects .all ()
200200 )
201+ self .user = kwargs .get ('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+ )
201212
202213 def save (self , instance , commit = True ):
203214 opts = instance .__class__ ._meta
@@ -219,8 +230,27 @@ def save(self, instance, commit=True):
219230 if field .is_no_change (data [f .name ]):
220231 continue
221232
233+ if f .name == 'declare_interest' :
234+ if data [f .name ]:
235+ self .instance .interested_users .add (self .user )
236+ else :
237+ self .instance .interested_users .remove (self .user )
238+ continue
239+
222240 setattr (instance , f .name , data [f .name ])
223241
224242 if commit :
225243 instance .save ()
226244 return instance
245+
246+ def declare_interest_only (self ):
247+ interest_only = True
248+ field_names = set (self .fields .keys ())
249+ field_names .remove ({'declare_interest' , 'action' })
250+
251+ for field_name in field_names :
252+ data = self .data .get (field_name , '*' )
253+ if data != '*' :
254+ interest_only = False
255+
256+ return interest_only
0 commit comments