diff --git a/src/InSillyCloWeb/assemblies/migrations/0010_simulatorjob_owner_simulatorjob_owning_session_and_more.py b/src/InSillyCloWeb/assemblies/migrations/0010_simulatorjob_owner_simulatorjob_owning_session_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..d6d96f99e194bfb29b0fb8af0a6382e8854d787e --- /dev/null +++ b/src/InSillyCloWeb/assemblies/migrations/0010_simulatorjob_owner_simulatorjob_owning_session_and_more.py @@ -0,0 +1,50 @@ +# Generated by Django 5.1.4 on 2025-04-24 08:47 + +import assemblies.models +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assemblies', '0009_simulatorjob_primers_file'), + ('sessions', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='simulatorjob', + name='owner', + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='jobs', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AddField( + model_name='simulatorjob', + name='owning_session', + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='jobs', + to='sessions.session', + ), + ), + migrations.AlterField( + model_name='simulatorjob', + name='primers_file', + field=models.FileField( + blank=True, + help_text='A CSV file where the header is "primerId;sequence".\nNote that the separator is ";".', + null=True, + upload_to=assemblies.models.job_dependant_primers_file_upload_to, + verbose_name='Primers file', + ), + ), + ] diff --git a/src/InSillyCloWeb/assemblies/models.py b/src/InSillyCloWeb/assemblies/models.py index b9d424c36d4ed9139fc65d5853a88f3b2e883a68..b9a800390cac2ed56de138b31a5a8e5b1d664091 100644 --- a/src/InSillyCloWeb/assemblies/models.py +++ b/src/InSillyCloWeb/assemblies/models.py @@ -321,6 +321,20 @@ class SimulatorJob(models.Model): verbose_name="Restriction enzyme", help_text="Enzyme used to produce digestion gel", ) + owner = models.ForeignKey( + User, + on_delete=models.CASCADE, + related_name='jobs', + null=True, + blank=True, + ) + owning_session = models.ForeignKey( + Session, + on_delete=models.CASCADE, + related_name='jobs', + null=True, + blank=True, + ) ######################################################################### # Function and methods diff --git a/src/InSillyCloWeb/assemblies/wizard_views.py b/src/InSillyCloWeb/assemblies/wizard_views.py index e84ff12199f09e72d044637036d800d2ad8189d7..c0c3012681026c1c53ab7573b13b70867e90286b 100644 --- a/src/InSillyCloWeb/assemblies/wizard_views.py +++ b/src/InSillyCloWeb/assemblies/wizard_views.py @@ -101,6 +101,9 @@ class AssemblySimulatorNotProtected(wizard_views.NamedUrlSessionWizardView): def done(self, form_list, form_dict=None, **kwargs): sjob = SimulatorJob.objects.create() + if self.request.user.is_authenticated: + sjob.owner = self.request.user + sjob.owning_session = Session.objects.get(session_key=self.request.session.session_key) sjob.save() sjob.add_design_to_dir(