diff --git a/.gitignore b/.gitignore index 820d3f3d35b2b44bdbb298f332138a408f219cc3..770db91597ff13db6c67b5ed65b8d40a4b32aaca 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ /ippidb_backend/PrepareFingerPrints/nbproject/private/ /ippidb_backend/PrepareFingerPrints/build/ /ippidb_backend/PrepareFingerPrints/dist/ -.DS_Store \ No newline at end of file +.DS_Store +ippisite/db.sqlite3 \ No newline at end of file diff --git a/ippisite/db.sqlite3.REMOVED.git-id b/ippisite/db.sqlite3.REMOVED.git-id index cb9c5e1693a3710e494a1ba429eeae1858babf29..fd8fbb23c5c506458a45a36f2f5747b0d78855d2 100644 --- a/ippisite/db.sqlite3.REMOVED.git-id +++ b/ippisite/db.sqlite3.REMOVED.git-id @@ -1 +1 @@ -067f156ca37c93920f1a15dac26337a9956fccbb \ No newline at end of file +cbc5368d062b8764f1b0d652691f17cd132d699f \ No newline at end of file diff --git a/ippisite/ippidb/forms.py b/ippisite/ippidb/forms.py index 925fbf2f4e6a9b671a23484e457ebefbcafd8d61..70e8abd9982acb4d51cf5862ffd7248537081b4e 100644 --- a/ippisite/ippidb/forms.py +++ b/ippisite/ippidb/forms.py @@ -39,8 +39,7 @@ class ProteinForm(ModelForm): 'entry_name' : forms.TextInput(attrs={'placeholder':'e.g KMT2A_HUMAN'}), } -ProteinFormSet = modelformset_factory(Protein, exclude=('recommended_name_long', 'short_name')) -formset=ProteinFormSet() +ProteinFormSet = modelformset_factory(Protein, exclude=('recommended_name_long', 'short_name'), extra=0) ARCHI_TYPE = ( diff --git a/ippisite/ippidb/templates/PDBForm.html b/ippisite/ippidb/templates/PDBForm.html index fc081b80415278b3bd22023cb32a52326cde0832..d4dd716e562f2074f160f14456bb4601f258b325 100644 --- a/ippisite/ippidb/templates/PDBForm.html +++ b/ippisite/ippidb/templates/PDBForm.html @@ -25,11 +25,13 @@ {% block custom_form %}{% endblock %} {% if wizard.form.forms %} + {{ wizard.form.management_form }} {{ formset.management_form }} {% for form in wizard.form.forms %} {{ form }} {% endfor %} {% else %} + {{ wizard.form.management_form }} {{ formset.management_form }} {% for form in formset %} {% for field in form %} @@ -41,4 +43,4 @@ <input type="submit" value="{% trans "Next step" %}"/> </form> </div> -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ippisite/ippidb/views.py b/ippisite/ippidb/views.py index aa4ba8ef6a3228933470f1e8a78eceb6d9425265..e4e17ee120c3cfea9d9ecd97aef33e5521fc8c19 100644 --- a/ippisite/ippidb/views.py +++ b/ippisite/ippidb/views.py @@ -5,7 +5,7 @@ from django.http import HttpResponseRedirect from formtools.wizard.views import SessionWizardView,NamedUrlSessionWizardView from .forms import IdForm, BibliographyForm, PDBForm, ProteinForm, ProteinDomainComplexTypeForm, ProteinDomainComplexForm, PpiForm, ProteinFormSet, PDBFormSet -from .models import Protein +from .models import Protein, Bibliography from .ws import get_pdb_uniprot_mapping def index(request): @@ -39,25 +39,36 @@ TEMPLATES = {"IdForm": "IdForm.html", "ProteinDomainComplexForm": "ProteinDomainComplexForm.html", "PpiForm": "PpiForm.html"} -class Ol(list): - ordered = True - class IppiWizard(NamedUrlSessionWizardView): def get_template_names(self): return [TEMPLATES[self.steps.current]] + def get_form_instance(self, step): + if self.steps.current=='BibliographyForm': + pk = self.storage.get_step_data('IdForm').get('pk') + return Bibliography.objects.get(pk=pk) + if self.steps.current=='ProteinForm': + pks = self.storage.get_step_data('PDBForm').get('pks') + return Protein.objects.filter(id__in=pks) + def process_step(self, form): """ This method overrides the one used to postprocess the form data. The added code just sets the form model for use in later forms when appropriate """ + data = super(IppiWizard, self).process_step(form).copy() if self.steps.current=='IdForm': form.instance.autofill() - self.instance_dict['BibliographyForm'] = form.instance - elif self.steps.current=='PDBForm': - uniprot_ids = get_pdb_uniprot_mapping(form.cleaned_data['pdb_id']) - proteins = [] + if self.steps.current in ['IdForm', 'Bibliography']: + form.instance.save() + data['pk'] = form.instance.id + if self.steps.current=='PDBForm': + pdb_ids = [form['pdb_id'] for form in form.cleaned_data] + uniprot_ids = [] + protein_ids = [] + for pdb_id in pdb_ids: + uniprot_ids += get_pdb_uniprot_mapping(pdb_id) for uniprot_id in uniprot_ids: try: p = Protein.objects.get(uniprot_id=uniprot_id) @@ -65,9 +76,10 @@ class IppiWizard(NamedUrlSessionWizardView): p = Protein() p.uniprot_id = uniprot_ids[0] p.autofill() - proteins.append(p) - self.instance_dict['ProteinForm'] = Ol(proteins) - return self.get_form_step_data(form) + p.save() + protein_ids.append(p.id) + data['pks'] = protein_ids + return data def done(self, form_list, **kwargs): return render(self.request, '/admin-session/add.html', {