@@ -198,6 +198,17 @@ def __init__(self, project, *args, **kwargs):
198
198
self .fields ['state' ] = OptionalModelChoiceField (
199
199
queryset = State .objects .all ()
200
200
)
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
+ )
201
212
202
213
def save (self , instance , commit = True ):
203
214
opts = instance .__class__ ._meta
@@ -219,8 +230,27 @@ def save(self, instance, commit=True):
219
230
if field .is_no_change (data [f .name ]):
220
231
continue
221
232
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
+
222
240
setattr (instance , f .name , data [f .name ])
223
241
224
242
if commit :
225
243
instance .save ()
226
244
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