def summary(request, sample_id): ''' summary takes in a request and a sample id and displays an array of summary images and statistics. It can also take a clonofilter via POST or GET ''' s = Sample.objects.get(id=sample_id) if request.method == 'POST': # Handling changes to filter form via POST cf_form = ClonoFilterForm(request.POST) if cf_form.is_valid(): # This code does not create a new clonofilter object if one # with the same form parameters has already been generated cf, created = ClonoFilter.objects.get_or_create( **cf_form.cleaned_data) url = "%s?clonofilter=%s" % ( reverse('samples.views.summary', args=[cf.sample.id]), cf.id) else: url = reverse('samples.views.summary', args=[s.id]) return HttpResponseRedirect(url) else: # Handling requests via GET # Sets up the form to reflect the clonofilter supplied by GET if 'clonofilter' in request.GET: cf_id = request.GET['clonofilter'] try: cf = ClonoFilter.objects.get(id=cf_id) f = ClonoFilterForm( initial=ClonoFilter.objects.filter(id=cf_id).values()[0]) except: return HttpResponseRedirect(reverse('samples.views.summary', args=[s.id])) # If there is no clonofilter specified, just return the default # clonofilter with no values else: f = ClonoFilterForm(initial={'sample': s.id}) cf = ClonoFilter.default_from_sample(s) context = {'sample': s, 'filter_form': f, 'clonofilter': cf, } return render(request, 'summary.html', context)
def test_form_renders_sample_id(self): form = ClonoFilterForm(initial={'sample': self.s}) self.assertIn(str(self.s.id), form.as_p())