def addCompoundDetails(request, rxn_id): """A view for adding compound details to a reaction.""" compoundQuantities = CompoundQuantity.objects.filter(reaction__id=rxn_id) CompoundQuantityFormset = modelformset_factory( model=CompoundQuantity, form=compoundQuantityFormFactory(rxn_id), can_delete=('creating' not in request.GET), extra=6) if request.method == "POST": formset = CompoundQuantityFormset(queryset=compoundQuantities, data=request.POST, prefix='quantities') if formset.is_valid(): formset.save() # copes with a bug in deletion from django CompoundQuantity.objects.filter( id__in=[cq.id for cq in formset.deleted_objects]).delete() messages.success(request, 'Compound details successfully updated') if 'creating' in request.GET: return redirect('createNumDescVals', rxn_id, params={'creating': True}) else: return redirect('editReaction', rxn_id) else: formset = CompoundQuantityFormset(queryset=compoundQuantities, prefix='quantities') return render( request, 'reaction_compound_add.html', { 'reactants_formset': formset, 'reaction': PerformedReaction.objects.get(id=rxn_id), })
def editReaction(request, rxn_id): """A view designed to edit performed reaction instances.""" status = 200 reaction = PerformedReaction.objects.get(id=rxn_id) if request.method == "POST": perfRxnForm = PerformedRxnForm( request.user, data=request.POST, instance=reaction, files=request.FILES) if perfRxnForm.is_valid(): perfRxnForm.save() messages.success(request, "Reaction successfully updated.") else: status = 422 else: perfRxnForm = PerformedRxnForm(request.user, instance=reaction) compoundQuantities = CompoundQuantity.objects.filter(reaction__id=rxn_id) CompoundQuantityFormset = modelformset_factory( model=CompoundQuantity, form=compoundQuantityFormFactory(rxn_id), can_delete=True, extra=1) cqFormset = CompoundQuantityFormset( queryset=compoundQuantities, prefix="quantities") descriptorFormsets = {} descriptorClasses = (('Numeric Descriptors', 'createNumDescVals', NumRxnDescriptorValue, NumRxnDescValFormFactory(rxn_id)), ('Ordinal Descriptors', 'createOrdDescVals', OrdRxnDescriptorValue, OrdRxnDescValFormFactory(rxn_id)), ('Boolean Descriptors', 'createBoolDescVals', BoolRxnDescriptorValue, BoolRxnDescValFormFactory(rxn_id)), ('Categorical Descriptors', 'createCatDescVals', CatRxnDescriptorValue, CatRxnDescValFormFactory(rxn_id))) for descLabel, urlName, descValClass, descValFormClass in descriptorClasses: descVals = descValClass.objects.filter(reaction__id=rxn_id).filter( descriptor__calculatorSoftware="manual") descriptors = descValClass.descriptorClass.objects.filter( calculatorSoftware='manual') initialDescriptors = descValClass.descriptorClass.objects.filter( isDefaultForLabGroups=reaction.labGroup, calculatorSoftware='manual').exclude(id__in=set(descVal.descriptor.id for descVal in descVals)) if descriptors.exists(): descValFormset = modelformset_factory( model=descValClass, form=descValFormClass, can_delete=True, extra=initialDescriptors.count() + 1) descriptorFormsets[descLabel] = {'url': urlName, 'formset': descValFormset(queryset=descVals, initial=[ {'descriptor': descriptor.id} for descriptor in initialDescriptors], prefix=urlName)} return render(request, 'reaction_edit.html', {'reaction_form': perfRxnForm, 'reactants_formset': cqFormset, 'descriptor_formsets': descriptorFormsets, 'reaction': reaction}, status=status)
def addCompoundDetails(request, rxn_id): """A view for adding compound details to a reaction.""" compoundQuantities = CompoundQuantity.objects.filter(reaction__id=rxn_id) CompoundQuantityFormset = modelformset_factory(model=CompoundQuantity, form=compoundQuantityFormFactory( rxn_id), can_delete=('creating' not in request.GET), extra=6) if request.method == "POST": formset = CompoundQuantityFormset( queryset=compoundQuantities, data=request.POST, prefix='quantities') if formset.is_valid(): formset.save() # copes with a bug in deletion from django CompoundQuantity.objects.filter( id__in=[cq.id for cq in formset.deleted_objects]).delete() messages.success(request, 'Compound details successfully updated') if 'creating' in request.GET: return redirect('createNumDescVals', rxn_id, params={'creating': True}) else: return redirect('editReaction', rxn_id) else: formset = CompoundQuantityFormset( queryset=compoundQuantities, prefix='quantities') return render(request, 'reaction_compound_add.html', {'reactants_formset': formset, 'reaction': PerformedReaction.objects.get(id=rxn_id), })
def editReaction(request, rxn_id): """A view designed to edit performed reaction instances.""" reaction = PerformedReaction.objects.get(id=rxn_id) if request.method == "POST": perfRxnForm = PerformedRxnForm( request.user, data=request.POST, instance=reaction) if perfRxnForm.is_valid(): perfRxnForm.save() messages.success(request, "Reaction successfully updated.") else: perfRxnForm = PerformedRxnForm(request.user, instance=reaction) compoundQuantities = CompoundQuantity.objects.filter(reaction__id=rxn_id) CompoundQuantityFormset = modelformset_factory( model=CompoundQuantity, form=compoundQuantityFormFactory(rxn_id), can_delete=True, extra=1) cqFormset = CompoundQuantityFormset( queryset=compoundQuantities, prefix="quantities") descriptorFormsets = {} descriptorClasses = (('Numeric Descriptors', 'createNumDescVals', NumRxnDescriptorValue, NumRxnDescValFormFactory(rxn_id)), ('Ordinal Descriptors', 'createOrdDescVals', OrdRxnDescriptorValue, OrdRxnDescValFormFactory(rxn_id)), ('Boolean Descriptors', 'createBoolDescVals', BoolRxnDescriptorValue, BoolRxnDescValFormFactory(rxn_id)), ('Categorical Descriptors', 'createCatDescVals', CatRxnDescriptorValue, CatRxnDescValFormFactory(rxn_id))) for descLabel, urlName, descValClass, descValFormClass in descriptorClasses: descriptors = descValClass.descriptorClass.objects.filter( calculatorSoftware='manual') if descriptors.exists(): descVals = descValClass.objects.filter(reaction__id=rxn_id).filter( descriptor__calculatorSoftware="manual") initialDescriptors = descValClass.descriptorClass.objects.filter( calculatorSoftware='manual').exclude(id__in=set(descVal.descriptor.id for descVal in descVals)) descValFormset = modelformset_factory( model=descValClass, form=descValFormClass, can_delete=True, extra=initialDescriptors.count()) descriptorFormsets[descLabel] = {'url': urlName, 'formset': descValFormset(queryset=descVals, initial=[ {'descriptor': descriptor.id} for descriptor in initialDescriptors], prefix=urlName)} return render(request, 'reaction_edit.html', {'reaction_form': perfRxnForm, 'reactants_formset': cqFormset, 'descriptor_formsets': descriptorFormsets, 'reaction': reaction})