@@ -63,6 +63,7 @@ def get_context_data(self, **kwargs):
6363 order_by = "id" # instance.primary_hgvs_column
6464 variants = instance .children .order_by ("{}" .format (order_by ))[:10 ]
6565 context ["variants" ] = variants
66+ # instance get the count_column from dataset, while instance.children get the count_column from variant.
6667 context ["score_columns" ] = instance .score_columns
6768 context ["count_columns" ] = instance .count_columns
6869
@@ -107,9 +108,26 @@ def get_ajax(self, *args, **kwargs):
107108 for variant in variants :
108109 row = {}
109110 if type_ == "counts" :
110- v_data = variant .count_data
111+ # Reorder the columns cause variants have different order from score set.
112+ variant_dict = variant .data ["count_data" ]
113+ correct_order = instance .count_columns [3 :]
114+ ordered_dict_items = [
115+ (k , variant_dict [k ]) for k in correct_order
116+ ]
117+ v_data = variant .count_data [:3 ]
118+ for o in ordered_dict_items :
119+ v_data .append (o [1 ])
120+ # v_data = variant.count_data
111121 else :
112- v_data = variant .score_data
122+ # Reorder the columns because variants have different order from score set table.
123+ variant_dict = variant .data ["score_data" ]
124+ correct_order = instance .score_columns [3 :]
125+ ordered_dict_items = [
126+ (k , variant_dict [k ]) for k in correct_order
127+ ]
128+ v_data = variant .score_data [:3 ]
129+ for o in ordered_dict_items :
130+ v_data .append (o [1 ])
113131
114132 for i , data in enumerate (v_data ):
115133 if isinstance (data , float ):
@@ -167,7 +185,6 @@ def form_valid(self, form: Dict[str, Any]) -> HttpResponseRedirect:
167185 profile = self .request .user .profile
168186 profile .clear_submission_errors ()
169187 profile .save ()
170-
171188 self .save_forms (form )
172189 messages .success (self .request , self .get_success_message ())
173190 except Exception as error :
@@ -220,7 +237,6 @@ def get_success_message(self) -> str:
220237 @transaction .atomic ()
221238 def save_forms (self , forms : Dict [str , Any ]) -> Dict [str , Any ]:
222239 scoreset_form : ScoreSetForm = forms ["scoreset_form" ]
223-
224240 with create_revision ():
225241 scoreset : ScoreSet = scoreset_form .save (commit = True )
226242 self .object : ScoreSet = scoreset
@@ -357,6 +373,7 @@ def dispatch(self, request, *args, **kwargs) -> HttpResponseRedirect:
357373
358374 return super ().dispatch (request , * args , ** kwargs )
359375
376+ # Create a new scoreset will call this method
360377 def post (self , request , * args , ** kwargs ):
361378 """
362379 Handles POST requests, instantiating a form instance with the passed
@@ -373,7 +390,6 @@ def post(self, request, *args, **kwargs):
373390
374391 scoreset_form : ScoreSetForm = forms .pop ("scoreset_form" )
375392 valid &= scoreset_form .is_valid (targetseq = target_form .get_targetseq ())
376-
377393 # Check that if AA sequence, dataset defined pro variants only.
378394 if (
379395 target_form .sequence_is_protein
@@ -392,7 +408,6 @@ def post(self, request, *args, **kwargs):
392408 # Put forms back into forms dictionary.
393409 forms ["scoreset_form" ] = scoreset_form
394410 forms ["target_gene_form" ] = target_form
395-
396411 if valid :
397412 return self .form_valid (forms )
398413 else :
@@ -423,6 +438,7 @@ def get_context_data(self, **kwargs):
423438 return context
424439
425440 @transaction .atomic ()
441+ # Saving a new scoreset calls this method.
426442 def save_forms (self , forms : Dict [str , Any ]) -> Dict [str , Any ]:
427443 """Called by form_valid when all forms are ready to be saved."""
428444 forms = super ().save_forms (forms = forms )
@@ -516,16 +532,12 @@ def post(self, request, *args, **kwargs):
516532 """
517533 # Store reference to object that will be created later
518534 self .object : ScoreSet = self .get_object ()
519-
520535 forms = self .get_form ()
521536 valid = True
522-
523537 if self .object .private :
524538 target_form : TargetGeneForm = forms .pop ("target_gene_form" )
525539 scoreset_form : ScoreSetForm = forms .pop ("scoreset_form" )
526-
527540 valid &= target_form .is_valid ()
528-
529541 if not self .object .get_target ().match_sequence (
530542 sequence = target_form .get_targetseq ()
531543 ):
@@ -541,7 +553,6 @@ def post(self, request, *args, **kwargs):
541553 valid &= scoreset_form .is_valid (
542554 targetseq = target_form .get_targetseq ()
543555 )
544-
545556 # Check that if AA sequence, dataset defined pro variants only,
546557 # but only if new files have been uploaded.
547558 if (
@@ -558,20 +569,22 @@ def post(self, request, *args, **kwargs):
558569
559570 # Check remaining forms which do not need special treatment
560571 valid &= all (form .is_valid () for _ , form in forms .items ())
561-
562572 # Put forms back into forms dictionary just in case
563573 forms ["scoreset_form" ] = scoreset_form
564574 forms ["target_gene_form" ] = target_form
565575 else :
566576 scoreset_form : ScoreSetForm = forms .pop ("scoreset_form" )
567577 valid &= scoreset_form .is_valid ()
578+ # Without this one, the forms will be empty so that users can't edit public score set.
579+ forms ["scoreset_form" ] = scoreset_form
568580
569581 if valid :
570582 return self .form_valid (forms )
571583 else :
572584 return self .form_invalid (forms )
573585
574586 @transaction .atomic ()
587+ # Save editing result calls this method. ss_form links to scoreset count_data.
575588 def save_forms (self , forms : Dict [str , Any ]) -> Dict [str , Any ]:
576589 """Called by form_valid when all forms are ready to be saved."""
577590 forms = super ().save_forms (forms = forms )
0 commit comments