From b003f50acfdc1ac113f165075b199b01f573f947 Mon Sep 17 00:00:00 2001 From: Philip Guyton Date: Thu, 10 Aug 2023 14:34:28 +0100 Subject: [PATCH] Establish on_delete for ForeignKey re Django update #2645 Adds now required on_delete argument to all ForeignKey and OneToOneField definitions: in both model definitions and all prior migration files. The resulting migration files for storageadmin (default) and smart_manager were created via: - poetry run django-admin makemigrations storageadmin - poetry run django-admin makemigrations smart_manager --- .../smart_manager/migrations/0001_initial.py | 18 +- .../migrations/0003_auto_20230810_1143.py | 25 ++ src/rockstor/smart_manager/models/nfsd.py | 4 +- .../smart_manager/models/nfsd_share.py | 2 +- .../smart_manager/models/nfsd_share_client.py | 2 +- .../smart_manager/models/nfsd_uid_gid.py | 2 +- src/rockstor/smart_manager/models/service.py | 2 +- .../smart_manager/models/share_replication.py | 4 +- src/rockstor/smart_manager/models/task.py | 2 +- .../storageadmin/migrations/0001_initial.py | 82 +++---- .../migrations/0002_auto_20161125_0051.py | 2 +- .../migrations/0005_auto_20180913_0923.py | 2 +- .../migrations/0006_dcontainerargs.py | 2 +- .../migrations/0007_auto_20181210_0740.py | 2 +- .../migrations/0013_auto_20200815_2004.py | 6 +- .../migrations/0017_auto_20230810_1141.py | 226 ++++++++++++++++++ .../storageadmin/models/dashboard_config.py | 2 +- .../storageadmin/models/installed_plugin.py | 2 +- .../storageadmin/models/iscsi_target.py | 2 +- .../storageadmin/models/network_interface.py | 10 +- .../storageadmin/models/nfs_export.py | 4 +- src/rockstor/storageadmin/models/oauth_app.py | 4 +- .../storageadmin/models/pool_balance.py | 2 +- .../storageadmin/models/posix_acls.py | 2 +- src/rockstor/storageadmin/models/rockon.py | 30 +-- .../storageadmin/models/samba_custom.py | 2 +- .../storageadmin/models/samba_share.py | 2 +- src/rockstor/storageadmin/models/scrub.py | 2 +- src/rockstor/storageadmin/models/sftp.py | 2 +- src/rockstor/storageadmin/models/share.py | 2 +- src/rockstor/storageadmin/models/smart.py | 16 +- src/rockstor/storageadmin/models/snapshot.py | 2 +- .../models/update_subscription.py | 2 +- src/rockstor/storageadmin/models/user.py | 4 +- 34 files changed, 363 insertions(+), 112 deletions(-) create mode 100644 src/rockstor/smart_manager/migrations/0003_auto_20230810_1143.py create mode 100644 src/rockstor/storageadmin/migrations/0017_auto_20230810_1141.py diff --git a/src/rockstor/smart_manager/migrations/0001_initial.py b/src/rockstor/smart_manager/migrations/0001_initial.py index e573dca5d..a0cf72eca 100644 --- a/src/rockstor/smart_manager/migrations/0001_initial.py +++ b/src/rockstor/smart_manager/migrations/0001_initial.py @@ -248,7 +248,7 @@ class Migration(migrations.Migration): ('end_ts', models.DateTimeField(null=True, db_index=True)), ('status', models.CharField(max_length=10)), ('error', models.CharField(max_length=4096, null=True)), - ('replica', models.ForeignKey(to='smart_manager.Replica')), + ('replica', models.ForeignKey(to='smart_manager.Replica', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -267,7 +267,7 @@ class Migration(migrations.Migration): ('status', models.BooleanField(default=False)), ('count', models.BigIntegerField(default=1)), ('ts', models.DateTimeField(auto_now=True, db_index=True)), - ('service', models.ForeignKey(to='smart_manager.Service')), + ('service', models.ForeignKey(to='smart_manager.Service', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -325,36 +325,36 @@ class Migration(migrations.Migration): migrations.AddField( model_name='task', name='task_def', - field=models.ForeignKey(to='smart_manager.TaskDefinition'), + field=models.ForeignKey(to='smart_manager.TaskDefinition', on_delete=models.CASCADE), ), migrations.AddField( model_name='receivetrail', name='rshare', - field=models.ForeignKey(to='smart_manager.ReplicaShare'), + field=models.ForeignKey(to='smart_manager.ReplicaShare', on_delete=models.CASCADE), ), migrations.AddField( model_name='nfsduidgiddistribution', name='rid', - field=models.ForeignKey(to='smart_manager.SProbe'), + field=models.ForeignKey(to='smart_manager.SProbe', on_delete=models.CASCADE), ), migrations.AddField( model_name='nfsdsharedistribution', name='rid', - field=models.ForeignKey(to='smart_manager.SProbe'), + field=models.ForeignKey(to='smart_manager.SProbe', on_delete=models.CASCADE), ), migrations.AddField( model_name='nfsdshareclientdistribution', name='rid', - field=models.ForeignKey(to='smart_manager.SProbe'), + field=models.ForeignKey(to='smart_manager.SProbe', on_delete=models.CASCADE), ), migrations.AddField( model_name='nfsdclientdistribution', name='rid', - field=models.ForeignKey(to='smart_manager.SProbe'), + field=models.ForeignKey(to='smart_manager.SProbe', on_delete=models.CASCADE), ), migrations.AddField( model_name='nfsdcalldistribution', name='rid', - field=models.ForeignKey(to='smart_manager.SProbe'), + field=models.ForeignKey(to='smart_manager.SProbe', on_delete=models.CASCADE), ), ] diff --git a/src/rockstor/smart_manager/migrations/0003_auto_20230810_1143.py b/src/rockstor/smart_manager/migrations/0003_auto_20230810_1143.py new file mode 100644 index 000000000..f38f8d69e --- /dev/null +++ b/src/rockstor/smart_manager/migrations/0003_auto_20230810_1143.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2023-08-10 10:43 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('smart_manager', '0002_auto_20170216_1212'), + ] + + operations = [ + migrations.AlterField( + model_name='sprobe', + name='state', + field=models.CharField(choices=[('created', 'created'), ('error', 'error'), ('running', 'running'), ('stopped', 'stopped')], max_length=7), + ), + migrations.AlterField( + model_name='taskdefinition', + name='task_type', + field=models.CharField(choices=[('scrub', 'scrub'), ('snapshot', 'snapshot'), ('reboot', 'reboot'), ('shutdown', 'shutdown'), ('suspend', 'suspend'), ('custom', 'custom')], max_length=100), + ), + ] diff --git a/src/rockstor/smart_manager/models/nfsd.py b/src/rockstor/smart_manager/models/nfsd.py index 8fd8f7696..a4ae3bae6 100644 --- a/src/rockstor/smart_manager/models/nfsd.py +++ b/src/rockstor/smart_manager/models/nfsd.py @@ -26,7 +26,7 @@ class NFSDCallDistribution(models.Model): for a given ts, number and i/o size of various nfs calls """ - rid = models.ForeignKey(SProbe) + rid = models.ForeignKey(SProbe, on_delete=models.CASCADE) ts = models.DateTimeField(db_index=True) num_lookup = models.BigIntegerField(default=0) num_read = models.BigIntegerField(default=0) @@ -51,7 +51,7 @@ class NFSDClientDistribution(models.Model): for a given ts and client_ip, number and i/o size of various nfs calls """ - rid = models.ForeignKey(SProbe) + rid = models.ForeignKey(SProbe, on_delete=models.CASCADE) ts = models.DateTimeField() ip = models.CharField(max_length=15) num_lookup = models.BigIntegerField(default=0) diff --git a/src/rockstor/smart_manager/models/nfsd_share.py b/src/rockstor/smart_manager/models/nfsd_share.py index 2918734f2..55983dcfe 100644 --- a/src/rockstor/smart_manager/models/nfsd_share.py +++ b/src/rockstor/smart_manager/models/nfsd_share.py @@ -26,7 +26,7 @@ class NFSDShareDistribution(models.Model): for a given ts and share, number and i/o size of various nfs calls """ - rid = models.ForeignKey(SProbe) + rid = models.ForeignKey(SProbe, on_delete=models.CASCADE) ts = models.DateTimeField(db_index=True) share = models.CharField(max_length=255) num_lookup = models.BigIntegerField(default=0) diff --git a/src/rockstor/smart_manager/models/nfsd_share_client.py b/src/rockstor/smart_manager/models/nfsd_share_client.py index 96d5228d7..97de7e858 100644 --- a/src/rockstor/smart_manager/models/nfsd_share_client.py +++ b/src/rockstor/smart_manager/models/nfsd_share_client.py @@ -26,7 +26,7 @@ class NFSDShareClientDistribution(models.Model): for a given ts and share, number and i/o size of various nfs calls """ - rid = models.ForeignKey(SProbe) + rid = models.ForeignKey(SProbe, on_delete=models.CASCADE) ts = models.DateTimeField(db_index=True) share = models.CharField(max_length=255) client = models.CharField(max_length=100) diff --git a/src/rockstor/smart_manager/models/nfsd_uid_gid.py b/src/rockstor/smart_manager/models/nfsd_uid_gid.py index 801f3bbe7..e977bc14e 100644 --- a/src/rockstor/smart_manager/models/nfsd_uid_gid.py +++ b/src/rockstor/smart_manager/models/nfsd_uid_gid.py @@ -26,7 +26,7 @@ class NFSDUidGidDistribution(models.Model): for a given ts and share, number and i/o size of various nfs calls """ - rid = models.ForeignKey(SProbe) + rid = models.ForeignKey(SProbe, on_delete=models.CASCADE) ts = models.DateTimeField(db_index=True) share = models.CharField(max_length=255) client = models.CharField(max_length=100) diff --git a/src/rockstor/smart_manager/models/service.py b/src/rockstor/smart_manager/models/service.py index 4f917b223..113d66076 100644 --- a/src/rockstor/smart_manager/models/service.py +++ b/src/rockstor/smart_manager/models/service.py @@ -31,7 +31,7 @@ class Meta: class ServiceStatus(models.Model): - service = models.ForeignKey(Service) + service = models.ForeignKey(Service, on_delete=models.CASCADE) status = models.BooleanField(default=False) count = models.BigIntegerField(default=1) ts = models.DateTimeField(auto_now=True, db_index=True) diff --git a/src/rockstor/smart_manager/models/share_replication.py b/src/rockstor/smart_manager/models/share_replication.py index 71453dc23..5d383d3c0 100644 --- a/src/rockstor/smart_manager/models/share_replication.py +++ b/src/rockstor/smart_manager/models/share_replication.py @@ -48,7 +48,7 @@ class ReplicaTrail(models.Model): 3. snapshot_created -> send_pending -> send_failed (error) """ - replica = models.ForeignKey(Replica) + replica = models.ForeignKey(Replica, on_delete=models.CASCADE) snap_name = models.CharField(max_length=1024) kb_sent = models.BigIntegerField(default=0) snapshot_created = models.DateTimeField(null=True) @@ -92,7 +92,7 @@ class ReceiveTrail(models.Model): 3. snapshot_created -> send_pending -> send_failed (error) """ - rshare = models.ForeignKey(ReplicaShare) + rshare = models.ForeignKey(ReplicaShare, on_delete=models.CASCADE) snap_name = models.CharField(max_length=1024) kb_received = models.BigIntegerField(default=0) receive_pending = models.DateTimeField(null=True) diff --git a/src/rockstor/smart_manager/models/task.py b/src/rockstor/smart_manager/models/task.py index 6822c27c7..548b87a48 100644 --- a/src/rockstor/smart_manager/models/task.py +++ b/src/rockstor/smart_manager/models/task.py @@ -22,7 +22,7 @@ class Task(models.Model): - task_def = models.ForeignKey(TaskDefinition) + task_def = models.ForeignKey(TaskDefinition, on_delete=models.CASCADE) state = models.CharField(max_length=64) start = models.DateTimeField(null=True, db_index=True) end = models.DateTimeField(null=True, db_index=True) diff --git a/src/rockstor/storageadmin/migrations/0001_initial.py b/src/rockstor/storageadmin/migrations/0001_initial.py index 00ec9a2da..20fc3a6b8 100644 --- a/src/rockstor/storageadmin/migrations/0001_initial.py +++ b/src/rockstor/storageadmin/migrations/0001_initial.py @@ -94,7 +94,7 @@ class Migration(migrations.Migration): ('val', models.CharField(max_length=1024, null=True)), ('description', models.CharField(max_length=2048, null=True)), ('label', models.CharField(max_length=64, null=True)), - ('container', models.ForeignKey(to='storageadmin.DContainer')), + ('container', models.ForeignKey(to='storageadmin.DContainer', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -102,8 +102,8 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(max_length=64, null=True)), - ('destination', models.ForeignKey(related_name='destination_container', to='storageadmin.DContainer')), - ('source', models.OneToOneField(to='storageadmin.DContainer')), + ('destination', models.ForeignKey(related_name='destination_container', to='storageadmin.DContainer', on_delete=models.CASCADE)), + ('source', models.OneToOneField(to='storageadmin.DContainer', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -155,7 +155,7 @@ class Migration(migrations.Migration): ('protocol', models.CharField(max_length=32, null=True)), ('uiport', models.BooleanField(default=False)), ('label', models.CharField(max_length=1024, null=True)), - ('container', models.ForeignKey(to='storageadmin.DContainer')), + ('container', models.ForeignKey(to='storageadmin.DContainer', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -167,7 +167,7 @@ class Migration(migrations.Migration): ('description', models.CharField(max_length=1024, null=True)), ('min_size', models.IntegerField(null=True)), ('label', models.CharField(max_length=1024, null=True)), - ('container', models.ForeignKey(to='storageadmin.DContainer')), + ('container', models.ForeignKey(to='storageadmin.DContainer', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -244,7 +244,7 @@ class Migration(migrations.Migration): ('ipv6_gw', models.CharField(max_length=64, null=True)), ('ipv6_dns', models.CharField(max_length=256, null=True)), ('ipv6_dns_search', models.CharField(max_length=256, null=True)), - ('master', models.ForeignKey(to='storageadmin.NetworkConnection', null=True)), + ('master', models.ForeignKey(to='storageadmin.NetworkConnection', null=True, on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -284,7 +284,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(unique=True, max_length=128)), - ('application', models.OneToOneField(to=settings.OAUTH2_PROVIDER_APPLICATION_MODEL)), + ('application', models.OneToOneField(to=settings.OAUTH2_PROVIDER_APPLICATION_MODEL, on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -332,7 +332,7 @@ class Migration(migrations.Migration): ('start_time', models.DateTimeField(auto_now=True)), ('end_time', models.DateTimeField(null=True)), ('percent_done', models.IntegerField(default=0)), - ('pool', models.ForeignKey(to='storageadmin.Pool')), + ('pool', models.ForeignKey(to='storageadmin.Pool', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -358,7 +358,7 @@ class Migration(migrations.Migration): ('unverified_errors', models.IntegerField(default=0)), ('corrected_errors', models.IntegerField(default=0)), ('last_physical', models.BigIntegerField(default=0)), - ('pool', models.ForeignKey(to='storageadmin.Pool')), + ('pool', models.ForeignKey(to='storageadmin.Pool', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -442,7 +442,7 @@ class Migration(migrations.Migration): ('compression_algo', models.CharField(max_length=1024, null=True)), ('rusage', models.BigIntegerField(default=0)), ('eusage', models.BigIntegerField(default=0)), - ('pool', models.ForeignKey(to='storageadmin.Pool')), + ('pool', models.ForeignKey(to='storageadmin.Pool', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -515,7 +515,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('toc', models.DateTimeField(auto_now=True)), - ('disk', models.ForeignKey(to='storageadmin.Disk')), + ('disk', models.ForeignKey(to='storageadmin.Disk', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -528,7 +528,7 @@ class Migration(migrations.Migration): ('pct_completed', models.IntegerField()), ('lifetime_hours', models.IntegerField()), ('lba_of_first_error', models.CharField(max_length=1024)), - ('info', models.ForeignKey(to='storageadmin.SMARTInfo')), + ('info', models.ForeignKey(to='storageadmin.SMARTInfo', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -536,7 +536,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('line', models.CharField(max_length=128)), - ('info', models.ForeignKey(to='storageadmin.SMARTInfo')), + ('info', models.ForeignKey(to='storageadmin.SMARTInfo', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -553,7 +553,7 @@ class Migration(migrations.Migration): ('snap_type', models.CharField(default=b'admin', max_length=64)), ('rusage', models.BigIntegerField(default=0)), ('eusage', models.BigIntegerField(default=0)), - ('share', models.ForeignKey(to='storageadmin.Share')), + ('share', models.ForeignKey(to='storageadmin.Share', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -572,7 +572,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(max_length=64, null=True)), ('config', models.CharField(max_length=2048, null=True)), - ('connection', models.ForeignKey(to='storageadmin.NetworkConnection', null=True)), + ('connection', models.ForeignKey(to='storageadmin.NetworkConnection', null=True, on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -593,7 +593,7 @@ class Migration(migrations.Migration): ('url', models.CharField(max_length=512)), ('password', models.CharField(max_length=64, null=True)), ('status', models.CharField(max_length=64)), - ('appliance', models.ForeignKey(to='storageadmin.Appliance')), + ('appliance', models.ForeignKey(to='storageadmin.Appliance', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -608,55 +608,55 @@ class Migration(migrations.Migration): ('homedir', models.CharField(max_length=1024, null=True)), ('email', models.CharField(blank=True, max_length=1024, null=True, validators=[django.core.validators.EmailValidator()])), ('admin', models.BooleanField(default=True)), - ('group', models.ForeignKey(blank=True, to='storageadmin.Group', null=True)), + ('group', models.ForeignKey(blank=True, to='storageadmin.Group', null=True, on_delete=models.CASCADE)), ('smb_shares', models.ManyToManyField(related_name='admin_users', null=True, to='storageadmin.SambaShare')), - ('user', models.OneToOneField(related_name='suser', null=True, blank=True, to=settings.AUTH_USER_MODEL)), + ('user', models.OneToOneField(related_name='suser', null=True, blank=True, to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], ), migrations.AddField( model_name='smartidentity', name='info', - field=models.ForeignKey(to='storageadmin.SMARTInfo'), + field=models.ForeignKey(to='storageadmin.SMARTInfo', on_delete=models.CASCADE), ), migrations.AddField( model_name='smarterrorlogsummary', name='info', - field=models.ForeignKey(to='storageadmin.SMARTInfo'), + field=models.ForeignKey(to='storageadmin.SMARTInfo', on_delete=models.CASCADE), ), migrations.AddField( model_name='smarterrorlog', name='info', - field=models.ForeignKey(to='storageadmin.SMARTInfo'), + field=models.ForeignKey(to='storageadmin.SMARTInfo', on_delete=models.CASCADE), ), migrations.AddField( model_name='smartcapability', name='info', - field=models.ForeignKey(to='storageadmin.SMARTInfo'), + field=models.ForeignKey(to='storageadmin.SMARTInfo', on_delete=models.CASCADE), ), migrations.AddField( model_name='smartattribute', name='info', - field=models.ForeignKey(to='storageadmin.SMARTInfo'), + field=models.ForeignKey(to='storageadmin.SMARTInfo', on_delete=models.CASCADE), ), migrations.AddField( model_name='sftp', name='share', - field=models.OneToOneField(to='storageadmin.Share'), + field=models.OneToOneField(to='storageadmin.Share', on_delete=models.CASCADE), ), migrations.AddField( model_name='sambashare', name='share', - field=models.OneToOneField(related_name='sambashare', to='storageadmin.Share'), + field=models.OneToOneField(related_name='sambashare', to='storageadmin.Share', on_delete=models.CASCADE), ), migrations.AddField( model_name='sambacustomconfig', name='smb_share', - field=models.ForeignKey(to='storageadmin.SambaShare'), + field=models.ForeignKey(to='storageadmin.SambaShare', on_delete=models.CASCADE), ), migrations.AddField( model_name='posixacls', name='smb_share', - field=models.ForeignKey(to='storageadmin.SambaShare'), + field=models.ForeignKey(to='storageadmin.SambaShare', on_delete=models.CASCADE), ), migrations.AlterUniqueTogether( name='pincard', @@ -665,42 +665,42 @@ class Migration(migrations.Migration): migrations.AddField( model_name='oauthapp', name='user', - field=models.ForeignKey(to='storageadmin.User'), + field=models.ForeignKey(to='storageadmin.User', on_delete=models.CASCADE), ), migrations.AddField( model_name='nfsexport', name='export_group', - field=models.ForeignKey(to='storageadmin.NFSExportGroup'), + field=models.ForeignKey(to='storageadmin.NFSExportGroup', on_delete=models.CASCADE), ), migrations.AddField( model_name='nfsexport', name='share', - field=models.ForeignKey(to='storageadmin.Share'), + field=models.ForeignKey(to='storageadmin.Share', on_delete=models.CASCADE), ), migrations.AddField( model_name='netatalkshare', name='share', - field=models.OneToOneField(related_name='netatalkshare', to='storageadmin.Share'), + field=models.OneToOneField(related_name='netatalkshare', to='storageadmin.Share', on_delete=models.CASCADE), ), migrations.AddField( model_name='iscsitarget', name='share', - field=models.ForeignKey(to='storageadmin.Share'), + field=models.ForeignKey(to='storageadmin.Share', on_delete=models.CASCADE), ), migrations.AddField( model_name='installedplugin', name='plugin_meta', - field=models.ForeignKey(to='storageadmin.Plugin'), + field=models.ForeignKey(to='storageadmin.Plugin', on_delete=models.CASCADE), ), migrations.AddField( model_name='ethernetconnection', name='connection', - field=models.ForeignKey(to='storageadmin.NetworkConnection', null=True), + field=models.ForeignKey(to='storageadmin.NetworkConnection', null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='dvolume', name='share', - field=models.ForeignKey(to='storageadmin.Share', null=True), + field=models.ForeignKey(to='storageadmin.Share', null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='disk', @@ -710,32 +710,32 @@ class Migration(migrations.Migration): migrations.AddField( model_name='dcustomconfig', name='rockon', - field=models.ForeignKey(to='storageadmin.RockOn'), + field=models.ForeignKey(to='storageadmin.RockOn', on_delete=models.CASCADE), ), migrations.AddField( model_name='dcontainer', name='dimage', - field=models.ForeignKey(to='storageadmin.DImage'), + field=models.ForeignKey(to='storageadmin.DImage', on_delete=models.CASCADE), ), migrations.AddField( model_name='dcontainer', name='rockon', - field=models.ForeignKey(to='storageadmin.RockOn'), + field=models.ForeignKey(to='storageadmin.RockOn', on_delete=models.CASCADE), ), migrations.AddField( model_name='dashboardconfig', name='user', - field=models.ForeignKey(to=settings.AUTH_USER_MODEL, unique=True), + field=models.ForeignKey(to=settings.AUTH_USER_MODEL, unique=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='containeroption', name='container', - field=models.ForeignKey(to='storageadmin.DContainer'), + field=models.ForeignKey(to='storageadmin.DContainer', on_delete=models.CASCADE), ), migrations.AddField( model_name='bondconnection', name='connection', - field=models.ForeignKey(to='storageadmin.NetworkConnection', null=True), + field=models.ForeignKey(to='storageadmin.NetworkConnection', null=True, on_delete=models.CASCADE), ), migrations.AlterUniqueTogether( name='snapshot', diff --git a/src/rockstor/storageadmin/migrations/0002_auto_20161125_0051.py b/src/rockstor/storageadmin/migrations/0002_auto_20161125_0051.py index 28e58433f..8eb4a9dca 100644 --- a/src/rockstor/storageadmin/migrations/0002_auto_20161125_0051.py +++ b/src/rockstor/storageadmin/migrations/0002_auto_20161125_0051.py @@ -15,7 +15,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='dashboardconfig', name='user', - field=models.OneToOneField(to=settings.AUTH_USER_MODEL), + field=models.OneToOneField(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE), ), migrations.AlterField( model_name='user', diff --git a/src/rockstor/storageadmin/migrations/0005_auto_20180913_0923.py b/src/rockstor/storageadmin/migrations/0005_auto_20180913_0923.py index b068c38a7..9dc67976b 100644 --- a/src/rockstor/storageadmin/migrations/0005_auto_20180913_0923.py +++ b/src/rockstor/storageadmin/migrations/0005_auto_20180913_0923.py @@ -19,7 +19,7 @@ class Migration(migrations.Migration): ('val', models.CharField(max_length=1024, null=True)), ('description', models.CharField(max_length=2048, null=True)), ('label', models.CharField(max_length=64, null=True)), - ('container', models.ForeignKey(to='storageadmin.DContainer')), + ('container', models.ForeignKey(to='storageadmin.DContainer', on_delete=models.CASCADE)), ], ), migrations.AlterUniqueTogether( diff --git a/src/rockstor/storageadmin/migrations/0006_dcontainerargs.py b/src/rockstor/storageadmin/migrations/0006_dcontainerargs.py index 6b96c9f17..b95d676e6 100644 --- a/src/rockstor/storageadmin/migrations/0006_dcontainerargs.py +++ b/src/rockstor/storageadmin/migrations/0006_dcontainerargs.py @@ -17,7 +17,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(max_length=1024)), ('val', models.CharField(max_length=1024, blank=True)), - ('container', models.ForeignKey(to='storageadmin.DContainer')), + ('container', models.ForeignKey(to='storageadmin.DContainer', on_delete=models.CASCADE)), ], ), ] diff --git a/src/rockstor/storageadmin/migrations/0007_auto_20181210_0740.py b/src/rockstor/storageadmin/migrations/0007_auto_20181210_0740.py index b5df8a00b..6ca4680af 100644 --- a/src/rockstor/storageadmin/migrations/0007_auto_20181210_0740.py +++ b/src/rockstor/storageadmin/migrations/0007_auto_20181210_0740.py @@ -17,7 +17,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('key', models.CharField(max_length=1024, null=True)), ('val', models.CharField(max_length=1024, null=True)), - ('container', models.ForeignKey(to='storageadmin.DContainer')), + ('container', models.ForeignKey(to='storageadmin.DContainer', on_delete=models.CASCADE)), ], ), migrations.AlterUniqueTogether( diff --git a/src/rockstor/storageadmin/migrations/0013_auto_20200815_2004.py b/src/rockstor/storageadmin/migrations/0013_auto_20200815_2004.py index ec32a92bf..9845bb82c 100644 --- a/src/rockstor/storageadmin/migrations/0013_auto_20200815_2004.py +++ b/src/rockstor/storageadmin/migrations/0013_auto_20200815_2004.py @@ -25,15 +25,15 @@ class Migration(migrations.Migration): ('ip_masquerade', models.BooleanField(default=False)), ('ip_range', models.CharField(max_length=64, null=True)), ('subnet', models.CharField(max_length=64, null=True)), - ('connection', models.ForeignKey(to='storageadmin.NetworkConnection', null=True)), + ('connection', models.ForeignKey(to='storageadmin.NetworkConnection', null=True, on_delete=models.CASCADE)), ], ), migrations.CreateModel( name='DContainerNetwork', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('connection', models.ForeignKey(to='storageadmin.BridgeConnection')), - ('container', models.ForeignKey(to='storageadmin.DContainer')), + ('connection', models.ForeignKey(to='storageadmin.BridgeConnection', on_delete=models.CASCADE)), + ('container', models.ForeignKey(to='storageadmin.DContainer', on_delete=models.CASCADE)), ], ), migrations.AddField( diff --git a/src/rockstor/storageadmin/migrations/0017_auto_20230810_1141.py b/src/rockstor/storageadmin/migrations/0017_auto_20230810_1141.py new file mode 100644 index 000000000..abbfe48a5 --- /dev/null +++ b/src/rockstor/storageadmin/migrations/0017_auto_20230810_1141.py @@ -0,0 +1,226 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2023-08-10 10:41 +from __future__ import unicode_literals + +from django.db import migrations, models +import storageadmin.models.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('storageadmin', '0016_auto_20221020_1605'), + ] + + operations = [ + migrations.AlterField( + model_name='appliance', + name='hostname', + field=models.CharField(default='Rockstor', max_length=128), + ), + migrations.AlterField( + model_name='configbackup', + name='config_backup', + field=models.FileField(null=True, upload_to='config-backups'), + ), + migrations.AlterField( + model_name='nfsexportgroup', + name='editable', + field=models.CharField(choices=[('ro', 'ro'), ('rw', 'rw')], default='rw', max_length=2, validators=[storageadmin.models.validators.validate_nfs_modify_str]), + ), + migrations.AlterField( + model_name='nfsexportgroup', + name='mount_security', + field=models.CharField(choices=[('secure', 'secure'), ('insecure', 'insecure')], default='insecure', max_length=8), + ), + migrations.AlterField( + model_name='nfsexportgroup', + name='syncable', + field=models.CharField(choices=[('async', 'async'), ('sync', 'sync')], default='async', max_length=5, validators=[storageadmin.models.validators.validate_nfs_sync_choice]), + ), + migrations.AlterField( + model_name='plugin', + name='description', + field=models.CharField(default='', max_length=4096), + ), + migrations.AlterField( + model_name='plugin', + name='display_name', + field=models.CharField(default='', max_length=4096, unique=True), + ), + migrations.AlterField( + model_name='poolbalance', + name='status', + field=models.CharField(default='started', max_length=10), + ), + migrations.AlterField( + model_name='poolscrub', + name='rate', + field=models.CharField(default='', max_length=15), + ), + migrations.AlterField( + model_name='poolscrub', + name='status', + field=models.CharField(default='started', max_length=10), + ), + migrations.AlterField( + model_name='posixacls', + name='owner', + field=models.CharField(choices=[('user', 'user'), ('group', 'group'), ('other', 'other')], max_length=5), + ), + migrations.AlterField( + model_name='posixacls', + name='perms', + field=models.CharField(choices=[('r', 'r'), ('w', 'w'), ('x', 'x'), ('rw', 'rw'), ('rx', 'rx'), ('wx', 'wx'), ('rwx', 'rwx')], max_length=3), + ), + migrations.AlterField( + model_name='sambashare', + name='browsable', + field=models.CharField(choices=[('yes', 'yes'), ('no', 'no')], default='yes', max_length=3), + ), + migrations.AlterField( + model_name='sambashare', + name='comment', + field=models.CharField(default='foo bar', max_length=100), + ), + migrations.AlterField( + model_name='sambashare', + name='guest_ok', + field=models.CharField(choices=[('yes', 'yes'), ('no', 'no')], default='no', max_length=3), + ), + migrations.AlterField( + model_name='sambashare', + name='read_only', + field=models.CharField(choices=[('yes', 'yes'), ('no', 'no')], default='no', max_length=3), + ), + migrations.AlterField( + model_name='sftp', + name='editable', + field=models.CharField(choices=[('ro', 'ro'), ('rw', 'rw')], default='ro', max_length=2), + ), + migrations.AlterField( + model_name='share', + name='group', + field=models.CharField(default='root', max_length=4096), + ), + migrations.AlterField( + model_name='share', + name='owner', + field=models.CharField(default='root', max_length=4096), + ), + migrations.AlterField( + model_name='share', + name='perms', + field=models.CharField(default='755', max_length=9), + ), + migrations.AlterField( + model_name='share', + name='pqgroup', + field=models.CharField(default='-1/-1', max_length=32), + ), + migrations.AlterField( + model_name='smartidentity', + name='assessment', + field=models.CharField(max_length=64, verbose_name='Overall Health Self-Assessment Test'), + ), + migrations.AlterField( + model_name='smartidentity', + name='ata_version', + field=models.CharField(max_length=64, verbose_name='ATA Version'), + ), + migrations.AlterField( + model_name='smartidentity', + name='capacity', + field=models.CharField(max_length=64, verbose_name='Capacity'), + ), + migrations.AlterField( + model_name='smartidentity', + name='device_model', + field=models.CharField(max_length=64, verbose_name='Device Model'), + ), + migrations.AlterField( + model_name='smartidentity', + name='enabled', + field=models.CharField(max_length=64, verbose_name='SMART Enabled'), + ), + migrations.AlterField( + model_name='smartidentity', + name='firmware_version', + field=models.CharField(max_length=64, verbose_name='Firmware Version'), + ), + migrations.AlterField( + model_name='smartidentity', + name='in_smartdb', + field=models.CharField(max_length=64, verbose_name='In Smartctl Database'), + ), + migrations.AlterField( + model_name='smartidentity', + name='model_family', + field=models.CharField(max_length=64, verbose_name='Model Family'), + ), + migrations.AlterField( + model_name='smartidentity', + name='rotation_rate', + field=models.CharField(max_length=64, verbose_name='Rotation Rate'), + ), + migrations.AlterField( + model_name='smartidentity', + name='sata_version', + field=models.CharField(max_length=64, verbose_name='SATA Version'), + ), + migrations.AlterField( + model_name='smartidentity', + name='scanned_on', + field=models.CharField(max_length=64, verbose_name='Scanned on'), + ), + migrations.AlterField( + model_name='smartidentity', + name='sector_size', + field=models.CharField(max_length=64, verbose_name='Sector Size'), + ), + migrations.AlterField( + model_name='smartidentity', + name='serial_number', + field=models.CharField(max_length=64, verbose_name='Serial Number'), + ), + migrations.AlterField( + model_name='smartidentity', + name='supported', + field=models.CharField(max_length=64, verbose_name='SMART Supported'), + ), + migrations.AlterField( + model_name='smartidentity', + name='version', + field=models.CharField(max_length=64, verbose_name='Smartctl Version'), + ), + migrations.AlterField( + model_name='smartidentity', + name='world_wide_name', + field=models.CharField(max_length=64, verbose_name='World Wide Name'), + ), + migrations.AlterField( + model_name='snapshot', + name='real_name', + field=models.CharField(default='unknownsnap', max_length=4096), + ), + migrations.AlterField( + model_name='snapshot', + name='snap_type', + field=models.CharField(default='admin', max_length=64), + ), + migrations.AlterField( + model_name='supportcase', + name='case_type', + field=models.CharField(choices=[('auto', 'auto'), ('manual', 'manual')], max_length=6), + ), + migrations.AlterField( + model_name='supportcase', + name='status', + field=models.CharField(choices=[('created', 'created'), ('submitted', 'submitted'), ('resolved', 'resolved')], max_length=9), + ), + migrations.AlterField( + model_name='user', + name='username', + field=models.CharField(default='', max_length=4096, unique=True), + ), + ] diff --git a/src/rockstor/storageadmin/models/dashboard_config.py b/src/rockstor/storageadmin/models/dashboard_config.py index a632c1e02..e57975525 100644 --- a/src/rockstor/storageadmin/models/dashboard_config.py +++ b/src/rockstor/storageadmin/models/dashboard_config.py @@ -21,7 +21,7 @@ class DashboardConfig(models.Model): - user = models.OneToOneField(User, null=False) + user = models.OneToOneField(User, null=False, on_delete=models.CASCADE) widgets = models.CharField(max_length=4096) class Meta: diff --git a/src/rockstor/storageadmin/models/installed_plugin.py b/src/rockstor/storageadmin/models/installed_plugin.py index c744c3643..6f5b6b991 100644 --- a/src/rockstor/storageadmin/models/installed_plugin.py +++ b/src/rockstor/storageadmin/models/installed_plugin.py @@ -21,7 +21,7 @@ class InstalledPlugin(models.Model): - plugin_meta = models.ForeignKey(Plugin) + plugin_meta = models.ForeignKey(Plugin, on_delete=models.CASCADE) install_date = models.DateTimeField(auto_now=True) class Meta: diff --git a/src/rockstor/storageadmin/models/iscsi_target.py b/src/rockstor/storageadmin/models/iscsi_target.py index 6cf202d27..edfb87535 100644 --- a/src/rockstor/storageadmin/models/iscsi_target.py +++ b/src/rockstor/storageadmin/models/iscsi_target.py @@ -21,7 +21,7 @@ class IscsiTarget(models.Model): - share = models.ForeignKey(Share) + share = models.ForeignKey(Share, on_delete=models.CASCADE) """target id""" tid = models.IntegerField(unique=True) """target name""" diff --git a/src/rockstor/storageadmin/models/network_interface.py b/src/rockstor/storageadmin/models/network_interface.py index 7d79ab530..d9ca7e4fa 100644 --- a/src/rockstor/storageadmin/models/network_interface.py +++ b/src/rockstor/storageadmin/models/network_interface.py @@ -59,7 +59,7 @@ class NetworkConnection(models.Model): ipv6_dns_search = models.CharField(max_length=256, null=True) # slave connections have a master. eg: team - master = models.ForeignKey("NetworkConnection", null=True) + master = models.ForeignKey("NetworkConnection", null=True, on_delete=models.CASCADE) @property def ipaddr(self): @@ -223,7 +223,7 @@ class Meta: # This is the most common of connection types that uses NetworkInterface of # dtype=ethernet class EthernetConnection(models.Model): - connection = models.ForeignKey(NetworkConnection, null=True) + connection = models.ForeignKey(NetworkConnection, null=True, on_delete=models.CASCADE) mac = models.CharField(max_length=64, null=True) cloned_mac = models.CharField(max_length=64, null=True) mtu = models.CharField(max_length=64, null=True) @@ -233,7 +233,7 @@ class Meta: class TeamConnection(models.Model): - connection = models.ForeignKey(NetworkConnection, null=True) + connection = models.ForeignKey(NetworkConnection, null=True, on_delete=models.CASCADE) # eg: Team1 name = models.CharField(max_length=64, null=True) # json config. @@ -244,7 +244,7 @@ class Meta: class BondConnection(models.Model): - connection = models.ForeignKey(NetworkConnection, null=True) + connection = models.ForeignKey(NetworkConnection, null=True, on_delete=models.CASCADE) name = models.CharField(max_length=64, null=True) # at the NM level it's not json like in team config, but we could convert # it for consistency. @@ -255,7 +255,7 @@ class Meta: class BridgeConnection(models.Model): - connection = models.ForeignKey(NetworkConnection, null=True) + connection = models.ForeignKey(NetworkConnection, null=True, on_delete=models.CASCADE) docker_name = models.CharField(max_length=64, null=True) usercon = models.BooleanField(default=False) aux_address = models.CharField(max_length=2048, null=True) diff --git a/src/rockstor/storageadmin/models/nfs_export.py b/src/rockstor/storageadmin/models/nfs_export.py index e6299f81a..b2f14a9d4 100644 --- a/src/rockstor/storageadmin/models/nfs_export.py +++ b/src/rockstor/storageadmin/models/nfs_export.py @@ -22,9 +22,9 @@ class NFSExport(models.Model): - export_group = models.ForeignKey(NFSExportGroup) + export_group = models.ForeignKey(NFSExportGroup, on_delete=models.CASCADE) """share that is exported""" - share = models.ForeignKey(Share) + share = models.ForeignKey(Share, on_delete=models.CASCADE) """mount point of the share""" mount = models.CharField(max_length=4096) diff --git a/src/rockstor/storageadmin/models/oauth_app.py b/src/rockstor/storageadmin/models/oauth_app.py index 97138044d..94a1fc75b 100644 --- a/src/rockstor/storageadmin/models/oauth_app.py +++ b/src/rockstor/storageadmin/models/oauth_app.py @@ -22,9 +22,9 @@ class OauthApp(models.Model): - application = models.OneToOneField(Application) + application = models.OneToOneField(Application, on_delete=models.CASCADE) name = models.CharField(max_length=128, unique=True) - user = models.ForeignKey(User) + user = models.ForeignKey(User, on_delete=models.CASCADE) def client_id(self, *args, **kwargs): return self.application.client_id diff --git a/src/rockstor/storageadmin/models/pool_balance.py b/src/rockstor/storageadmin/models/pool_balance.py index 180e26443..ac25a33f5 100644 --- a/src/rockstor/storageadmin/models/pool_balance.py +++ b/src/rockstor/storageadmin/models/pool_balance.py @@ -22,7 +22,7 @@ class PoolBalance(models.Model): - pool = models.ForeignKey(Pool) + pool = models.ForeignKey(Pool, on_delete=models.CASCADE) # started|running|cancelling|cancelled|pausing|paused|finished|failed|terminated status = models.CharField(max_length=10, default="started") # huey uuid diff --git a/src/rockstor/storageadmin/models/posix_acls.py b/src/rockstor/storageadmin/models/posix_acls.py index 4c0282f10..0a9e14c22 100644 --- a/src/rockstor/storageadmin/models/posix_acls.py +++ b/src/rockstor/storageadmin/models/posix_acls.py @@ -21,7 +21,7 @@ class PosixACLs(models.Model): - smb_share = models.ForeignKey(SambaShare) + smb_share = models.ForeignKey(SambaShare, on_delete=models.CASCADE) USER = "user" GROUP = "group" OTHER = "other" diff --git a/src/rockstor/storageadmin/models/rockon.py b/src/rockstor/storageadmin/models/rockon.py index 04e43bd0f..2650378a2 100644 --- a/src/rockstor/storageadmin/models/rockon.py +++ b/src/rockstor/storageadmin/models/rockon.py @@ -97,8 +97,8 @@ class Meta: class DContainer(models.Model): - rockon = models.ForeignKey(RockOn) - dimage = models.ForeignKey(DImage) + rockon = models.ForeignKey(RockOn, on_delete=models.CASCADE) + dimage = models.ForeignKey(DImage, on_delete=models.CASCADE) name = models.CharField(max_length=1024, unique=True) launch_order = models.IntegerField(default=1) # if uid is None, container's owner is not set. defaults to root. if it's @@ -111,8 +111,8 @@ class Meta: class DContainerLink(models.Model): - source = models.OneToOneField(DContainer) - destination = models.ForeignKey(DContainer, related_name="destination_container") + source = models.OneToOneField(DContainer, on_delete=models.CASCADE) + destination = models.ForeignKey(DContainer, related_name="destination_container", on_delete=models.CASCADE) name = models.CharField(max_length=64, null=True) class Meta: @@ -121,8 +121,8 @@ class Meta: class DContainerNetwork(models.Model): - container = models.ForeignKey(DContainer) - connection = models.ForeignKey(BridgeConnection) + container = models.ForeignKey(DContainer, on_delete=models.CASCADE) + connection = models.ForeignKey(BridgeConnection, on_delete=models.CASCADE) @property def docker_name(self): @@ -146,7 +146,7 @@ class DPort(models.Model): hostp = models.IntegerField(unique=True) hostp_default = models.IntegerField(null=True) containerp = models.IntegerField() - container = models.ForeignKey(DContainer) + container = models.ForeignKey(DContainer, on_delete=models.CASCADE) protocol = models.CharField(max_length=32, null=True) uiport = models.BooleanField(default=False) label = models.CharField(max_length=1024, null=True) @@ -167,8 +167,8 @@ class Meta: class DVolume(models.Model): - container = models.ForeignKey(DContainer) - share = models.ForeignKey(Share, null=True) + container = models.ForeignKey(DContainer, on_delete=models.CASCADE) + share = models.ForeignKey(Share, null=True, on_delete=models.CASCADE) dest_dir = models.CharField(max_length=1024) uservol = models.BooleanField(default=False) description = models.CharField(max_length=1024, null=True) @@ -190,7 +190,7 @@ class Meta: class ContainerOption(models.Model): - container = models.ForeignKey(DContainer) + container = models.ForeignKey(DContainer, on_delete=models.CASCADE) name = models.CharField(max_length=1024) val = models.CharField(max_length=1024, blank=True) @@ -199,7 +199,7 @@ class Meta: class DContainerArgs(models.Model): - container = models.ForeignKey(DContainer) + container = models.ForeignKey(DContainer, on_delete=models.CASCADE) name = models.CharField(max_length=1024) val = models.CharField(max_length=1024, blank=True) @@ -208,7 +208,7 @@ class Meta: class DCustomConfig(models.Model): - rockon = models.ForeignKey(RockOn) + rockon = models.ForeignKey(RockOn, on_delete=models.CASCADE) key = models.CharField(max_length=1024) val = models.CharField(max_length=1024, null=True) description = models.CharField(max_length=2048, null=True) @@ -223,7 +223,7 @@ class Meta: class DContainerEnv(models.Model): - container = models.ForeignKey(DContainer) + container = models.ForeignKey(DContainer, on_delete=models.CASCADE) key = models.CharField(max_length=1024) val = models.CharField(max_length=1024, null=True) description = models.CharField(max_length=2048, null=True) @@ -231,7 +231,7 @@ class DContainerEnv(models.Model): class DContainerDevice(models.Model): - container = models.ForeignKey(DContainer) + container = models.ForeignKey(DContainer, on_delete=models.CASCADE) dev = models.CharField(max_length=1024, null=True) val = models.CharField(max_length=1024, null=True) description = models.CharField(max_length=2048, null=True) @@ -243,7 +243,7 @@ class Meta: class DContainerLabel(models.Model): - container = models.ForeignKey(DContainer) + container = models.ForeignKey(DContainer, on_delete=models.CASCADE) key = models.CharField(max_length=1024, null=True) val = models.CharField(max_length=1024, null=True) diff --git a/src/rockstor/storageadmin/models/samba_custom.py b/src/rockstor/storageadmin/models/samba_custom.py index 8eb5073f6..96db91387 100644 --- a/src/rockstor/storageadmin/models/samba_custom.py +++ b/src/rockstor/storageadmin/models/samba_custom.py @@ -21,7 +21,7 @@ class SambaCustomConfig(models.Model): - smb_share = models.ForeignKey(SambaShare) + smb_share = models.ForeignKey(SambaShare, on_delete=models.CASCADE) custom_config = models.CharField(max_length=1024, null=True) class Meta: diff --git a/src/rockstor/storageadmin/models/samba_share.py b/src/rockstor/storageadmin/models/samba_share.py index 7c5921f87..3a5762162 100644 --- a/src/rockstor/storageadmin/models/samba_share.py +++ b/src/rockstor/storageadmin/models/samba_share.py @@ -24,7 +24,7 @@ class SambaShare(models.Model): YES = "yes" NO = "no" """share that is exported""" - share = models.OneToOneField("Share", related_name="sambashare") + share = models.OneToOneField("Share", related_name="sambashare", on_delete=models.CASCADE) """mount point of the share""" path = models.CharField(max_length=4096, unique=True) comment = models.CharField(max_length=100, default="foo bar") diff --git a/src/rockstor/storageadmin/models/scrub.py b/src/rockstor/storageadmin/models/scrub.py index 110de0876..36736f45b 100644 --- a/src/rockstor/storageadmin/models/scrub.py +++ b/src/rockstor/storageadmin/models/scrub.py @@ -22,7 +22,7 @@ class PoolScrub(models.Model): - pool = models.ForeignKey(Pool) + pool = models.ForeignKey(Pool, on_delete=models.CASCADE) # with a max of 10 chars we use 'halted' to indicated 'interrupted' status = models.CharField(max_length=10, default="started") # pid is the process id of a scrub job diff --git a/src/rockstor/storageadmin/models/sftp.py b/src/rockstor/storageadmin/models/sftp.py index 2448a87d0..815134828 100644 --- a/src/rockstor/storageadmin/models/sftp.py +++ b/src/rockstor/storageadmin/models/sftp.py @@ -23,7 +23,7 @@ class SFTP(models.Model): READ_ONLY = "ro" READ_WRITE = "rw" - share = models.OneToOneField("Share") + share = models.OneToOneField("Share", on_delete=models.CASCADE) """read only by default""" MODIFY_CHOICES = ( (READ_ONLY, "ro"), diff --git a/src/rockstor/storageadmin/models/share.py b/src/rockstor/storageadmin/models/share.py index 5749dcf99..0db8af4ce 100644 --- a/src/rockstor/storageadmin/models/share.py +++ b/src/rockstor/storageadmin/models/share.py @@ -28,7 +28,7 @@ class Share(models.Model): # pool that this share is part of - pool = models.ForeignKey(Pool) + pool = models.ForeignKey(Pool, on_delete=models.CASCADE) """auto created 0/x qgroup""" qgroup = models.CharField(max_length=100) """quota group y/x explicitly created for this Share""" diff --git a/src/rockstor/storageadmin/models/smart.py b/src/rockstor/storageadmin/models/smart.py index 9fa4caf1f..751c6be9e 100644 --- a/src/rockstor/storageadmin/models/smart.py +++ b/src/rockstor/storageadmin/models/smart.py @@ -21,7 +21,7 @@ class SMARTCapability(models.Model): - info = models.ForeignKey("SMARTInfo") + info = models.ForeignKey("SMARTInfo", on_delete=models.CASCADE) name = models.CharField(max_length=1024) flag = models.CharField(max_length=64) capabilities = models.CharField(max_length=2048) @@ -31,7 +31,7 @@ class Meta: class SMARTAttribute(models.Model): - info = models.ForeignKey("SMARTInfo") + info = models.ForeignKey("SMARTInfo", on_delete=models.CASCADE) aid = models.IntegerField() name = models.CharField(max_length=256) flag = models.CharField(max_length=64) @@ -48,7 +48,7 @@ class Meta: class SMARTErrorLog(models.Model): - info = models.ForeignKey("SMARTInfo") + info = models.ForeignKey("SMARTInfo", on_delete=models.CASCADE) line = models.CharField(max_length=128) class Meta: @@ -56,7 +56,7 @@ class Meta: class SMARTErrorLogSummary(models.Model): - info = models.ForeignKey("SMARTInfo") + info = models.ForeignKey("SMARTInfo", on_delete=models.CASCADE) error_num = models.IntegerField() lifetime_hours = models.IntegerField() state = models.CharField(max_length=64) @@ -68,7 +68,7 @@ class Meta: class SMARTTestLog(models.Model): - info = models.ForeignKey("SMARTInfo") + info = models.ForeignKey("SMARTInfo", on_delete=models.CASCADE) test_num = models.IntegerField() description = models.CharField(max_length=64) status = models.CharField(max_length=256) @@ -81,7 +81,7 @@ class Meta: class SMARTTestLogDetail(models.Model): - info = models.ForeignKey("SMARTInfo") + info = models.ForeignKey("SMARTInfo", on_delete=models.CASCADE) line = models.CharField(max_length=128) class Meta: @@ -89,7 +89,7 @@ class Meta: class SMARTIdentity(models.Model): - info = models.ForeignKey("SMARTInfo") + info = models.ForeignKey("SMARTInfo", on_delete=models.CASCADE) CHOICES = [ ("Model Family",) * 2, ("Device Model",) * 2, @@ -129,7 +129,7 @@ class Meta: class SMARTInfo(models.Model): - disk = models.ForeignKey(Disk) + disk = models.ForeignKey(Disk, on_delete=models.CASCADE) toc = models.DateTimeField(auto_now=True) class Meta: diff --git a/src/rockstor/storageadmin/models/snapshot.py b/src/rockstor/storageadmin/models/snapshot.py index af7661dc1..373a982e6 100644 --- a/src/rockstor/storageadmin/models/snapshot.py +++ b/src/rockstor/storageadmin/models/snapshot.py @@ -22,7 +22,7 @@ class Snapshot(models.Model): """share which this snapshot belongs to""" - share = models.ForeignKey("Share") # Resolve circular dependency + share = models.ForeignKey("Share", on_delete=models.CASCADE) # Resolve circular dependency """display name of the snapshot""" name = models.CharField(max_length=4096) """real name of the snapshot""" diff --git a/src/rockstor/storageadmin/models/update_subscription.py b/src/rockstor/storageadmin/models/update_subscription.py index b92fd2f0f..387089214 100644 --- a/src/rockstor/storageadmin/models/update_subscription.py +++ b/src/rockstor/storageadmin/models/update_subscription.py @@ -28,7 +28,7 @@ class UpdateSubscription(models.Model): description = models.CharField(max_length=128) """url of the repo""" url = models.CharField(max_length=512) - appliance = models.ForeignKey(Appliance) + appliance = models.ForeignKey(Appliance, on_delete=models.CASCADE) password = models.CharField(max_length=64, null=True) """status of subscription: active, inactive, expired etc..""" status = models.CharField(max_length=64) diff --git a/src/rockstor/storageadmin/models/user.py b/src/rockstor/storageadmin/models/user.py index 9a5a9db05..9fed0045b 100644 --- a/src/rockstor/storageadmin/models/user.py +++ b/src/rockstor/storageadmin/models/user.py @@ -28,7 +28,7 @@ class User(models.Model): - user = models.OneToOneField(DjangoUser, null=True, blank=True, related_name="suser") + user = models.OneToOneField(DjangoUser, null=True, blank=True, related_name="suser", on_delete=models.CASCADE) username = models.CharField(max_length=4096, unique=True, default="") uid = models.IntegerField(default=settings.START_UID) gid = models.IntegerField(default=settings.START_UID) @@ -41,7 +41,7 @@ class User(models.Model): ) # 'admin' field represents indicator of Rockstor web admin capability. admin = models.BooleanField(default=True) - group = models.ForeignKey(Group, null=True, blank=True) + group = models.ForeignKey(Group, null=True, blank=True, on_delete=models.CASCADE) @property def groupname(self, *args, **kwargs):