Merge pull request #18316 from edx/thallada/PLAT-1524-on-delete
PLAT-1524: Add on_delete kwarg to ForeignKey & OneToOneFields
This commit is contained in:
@@ -24,7 +24,7 @@ class Migration(migrations.Migration):
|
||||
('status', models.CharField(default=b'pending', help_text='Status of this API access request', max_length=255, db_index=True, choices=[(b'pending', 'Pending'), (b'denied', 'Denied'), (b'approved', 'Approved')])),
|
||||
('website', models.URLField(help_text='The URL of the website associated with this API user.')),
|
||||
('reason', models.TextField(help_text='The reason this user wants to access the API.')),
|
||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
|
||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('-modified', '-created'),
|
||||
|
||||
@@ -50,6 +50,6 @@ class Migration(migrations.Migration):
|
||||
migrations.AlterField(
|
||||
model_name='apiaccessrequest',
|
||||
name='user',
|
||||
field=models.OneToOneField(to=settings.AUTH_USER_MODEL),
|
||||
field=models.OneToOneField(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -21,7 +21,7 @@ class Migration(migrations.Migration):
|
||||
migrations.AddField(
|
||||
model_name='apiaccessrequest',
|
||||
name='site',
|
||||
field=models.ForeignKey(default=1, to='sites.Site'),
|
||||
field=models.ForeignKey(default=1, to='sites.Site', on_delete=models.CASCADE),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
|
||||
@@ -15,6 +15,6 @@ class Migration(migrations.Migration):
|
||||
migrations.AlterField(
|
||||
model_name='apiaccessrequest',
|
||||
name='user',
|
||||
field=models.OneToOneField(related_name='api_access_request', to=settings.AUTH_USER_MODEL),
|
||||
field=models.OneToOneField(related_name='api_access_request', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -32,7 +32,7 @@ class ApiAccessRequest(TimeStampedModel):
|
||||
(DENIED, _('Denied')),
|
||||
(APPROVED, _('Approved')),
|
||||
)
|
||||
user = models.OneToOneField(User, related_name='api_access_request')
|
||||
user = models.OneToOneField(User, related_name='api_access_request', on_delete=models.CASCADE)
|
||||
status = models.CharField(
|
||||
max_length=255,
|
||||
choices=STATUS_CHOICES,
|
||||
@@ -44,7 +44,7 @@ class ApiAccessRequest(TimeStampedModel):
|
||||
reason = models.TextField(help_text=_('The reason this user wants to access the API.'))
|
||||
company_name = models.CharField(max_length=255, default='')
|
||||
company_address = models.CharField(max_length=255, default='')
|
||||
site = models.ForeignKey(Site)
|
||||
site = models.ForeignKey(Site, on_delete=models.CASCADE)
|
||||
contacted = models.BooleanField(default=False)
|
||||
|
||||
class Meta:
|
||||
|
||||
@@ -25,7 +25,7 @@ class Migration(migrations.Migration):
|
||||
('course_key', CourseKeyField(max_length=255, db_index=True)),
|
||||
('usage_key', UsageKeyField(max_length=255, db_index=True)),
|
||||
('_path', jsonfield.fields.JSONField(help_text=b'Path in course tree to the block', db_column=b'path')),
|
||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
|
||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
@@ -46,7 +46,7 @@ class Migration(migrations.Migration):
|
||||
migrations.AddField(
|
||||
model_name='bookmark',
|
||||
name='xblock_cache',
|
||||
field=models.ForeignKey(to='bookmarks.XBlockCache'),
|
||||
field=models.ForeignKey(to='bookmarks.XBlockCache', on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='bookmark',
|
||||
|
||||
@@ -42,12 +42,12 @@ class Bookmark(TimeStampedModel):
|
||||
"""
|
||||
Bookmarks model.
|
||||
"""
|
||||
user = models.ForeignKey(User, db_index=True)
|
||||
user = models.ForeignKey(User, db_index=True, on_delete=models.CASCADE)
|
||||
course_key = CourseKeyField(max_length=255, db_index=True)
|
||||
usage_key = UsageKeyField(max_length=255, db_index=True)
|
||||
_path = JSONField(db_column='path', help_text='Path in course tree to the block')
|
||||
|
||||
xblock_cache = models.ForeignKey('bookmarks.XBlockCache')
|
||||
xblock_cache = models.ForeignKey('bookmarks.XBlockCache', on_delete=models.CASCADE)
|
||||
|
||||
class Meta(object):
|
||||
"""
|
||||
|
||||
@@ -54,7 +54,7 @@ class Migration(migrations.Migration):
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('tab_id', models.CharField(max_length=50)),
|
||||
('course_overview', models.ForeignKey(related_name='tabs', to='course_overviews.CourseOverview')),
|
||||
('course_overview', models.ForeignKey(related_name='tabs', to='course_overviews.CourseOverview', on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
||||
@@ -21,7 +21,7 @@ class Migration(migrations.Migration):
|
||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
||||
('small_url', models.TextField(default=b'', blank=True)),
|
||||
('large_url', models.TextField(default=b'', blank=True)),
|
||||
('course_overview', models.OneToOneField(related_name='image_set', to='course_overviews.CourseOverview')),
|
||||
('course_overview', models.OneToOneField(related_name='image_set', to='course_overviews.CourseOverview', on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
||||
@@ -708,7 +708,7 @@ class CourseOverviewTab(models.Model):
|
||||
Model for storing and caching tabs information of a course.
|
||||
"""
|
||||
tab_id = models.CharField(max_length=50)
|
||||
course_overview = models.ForeignKey(CourseOverview, db_index=True, related_name="tabs")
|
||||
course_overview = models.ForeignKey(CourseOverview, db_index=True, related_name="tabs", on_delete=models.CASCADE)
|
||||
|
||||
|
||||
class CourseOverviewImageSet(TimeStampedModel):
|
||||
@@ -779,7 +779,8 @@ class CourseOverviewImageSet(TimeStampedModel):
|
||||
interested in extending this functionality.
|
||||
|
||||
"""
|
||||
course_overview = models.OneToOneField(CourseOverview, db_index=True, related_name="image_set")
|
||||
course_overview = models.OneToOneField(CourseOverview, db_index=True, related_name="image_set",
|
||||
on_delete=models.CASCADE)
|
||||
small_url = models.TextField(blank=True, default="")
|
||||
large_url = models.TextField(blank=True, default="")
|
||||
|
||||
|
||||
@@ -55,23 +55,23 @@ class Migration(migrations.Migration):
|
||||
('group_id', models.IntegerField(help_text=b'contains the id of a specific group within the cohorted partition')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('course_user_group', models.OneToOneField(to='course_groups.CourseUserGroup')),
|
||||
('course_user_group', models.OneToOneField(to='course_groups.CourseUserGroup', on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='coursecohort',
|
||||
name='course_user_group',
|
||||
field=models.OneToOneField(related_name='cohort', to='course_groups.CourseUserGroup'),
|
||||
field=models.OneToOneField(related_name='cohort', to='course_groups.CourseUserGroup', on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cohortmembership',
|
||||
name='course_user_group',
|
||||
field=models.ForeignKey(to='course_groups.CourseUserGroup'),
|
||||
field=models.ForeignKey(to='course_groups.CourseUserGroup', on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cohortmembership',
|
||||
name='user',
|
||||
field=models.ForeignKey(to=settings.AUTH_USER_MODEL),
|
||||
field=models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='courseusergroup',
|
||||
|
||||
@@ -18,7 +18,7 @@ class Migration(migrations.Migration):
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('email', models.CharField(db_index=True, max_length=255, blank=True)),
|
||||
('course_id', CourseKeyField(max_length=255)),
|
||||
('course_user_group', models.ForeignKey(to='course_groups.CourseUserGroup')),
|
||||
('course_user_group', models.ForeignKey(to='course_groups.CourseUserGroup', on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
|
||||
@@ -70,8 +70,8 @@ class CourseUserGroup(models.Model):
|
||||
class CohortMembership(models.Model):
|
||||
"""Used internally to enforce our particular definition of uniqueness"""
|
||||
|
||||
course_user_group = models.ForeignKey(CourseUserGroup)
|
||||
user = models.ForeignKey(User)
|
||||
course_user_group = models.ForeignKey(CourseUserGroup, on_delete=models.CASCADE)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
course_id = CourseKeyField(max_length=255)
|
||||
|
||||
previous_cohort = None
|
||||
@@ -155,7 +155,7 @@ class CourseUserGroupPartitionGroup(models.Model):
|
||||
"""
|
||||
Create User Partition Info.
|
||||
"""
|
||||
course_user_group = models.OneToOneField(CourseUserGroup)
|
||||
course_user_group = models.OneToOneField(CourseUserGroup, on_delete=models.CASCADE)
|
||||
partition_id = models.IntegerField(
|
||||
help_text="contains the id of a cohorted partition in this course"
|
||||
)
|
||||
@@ -209,7 +209,8 @@ class CourseCohort(models.Model):
|
||||
"""
|
||||
This model represents cohort related info.
|
||||
"""
|
||||
course_user_group = models.OneToOneField(CourseUserGroup, unique=True, related_name='cohort')
|
||||
course_user_group = models.OneToOneField(CourseUserGroup, unique=True, related_name='cohort',
|
||||
on_delete=models.CASCADE)
|
||||
|
||||
RANDOM = 'random'
|
||||
MANUAL = 'manual'
|
||||
@@ -246,6 +247,6 @@ class UnregisteredLearnerCohortAssignments(DeletableByUserValue, models.Model):
|
||||
class Meta(object):
|
||||
unique_together = (('course_id', 'email'), )
|
||||
|
||||
course_user_group = models.ForeignKey(CourseUserGroup)
|
||||
course_user_group = models.ForeignKey(CourseUserGroup, on_delete=models.CASCADE)
|
||||
email = models.CharField(blank=True, max_length=255, db_index=True)
|
||||
course_id = CourseKeyField(max_length=255)
|
||||
|
||||
@@ -35,7 +35,7 @@ class Migration(migrations.Migration):
|
||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
||||
('username', models.CharField(max_length=255, db_index=True)),
|
||||
('deadline', models.DateTimeField(default=openedx.core.djangoapps.credit.models.default_deadline_for_credit_eligibility, help_text='Deadline for purchasing and requesting credit.')),
|
||||
('course', models.ForeignKey(related_name='eligibilities', to='credit.CreditCourse')),
|
||||
('course', models.ForeignKey(related_name='eligibilities', to='credit.CreditCourse', on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'verbose_name_plural': 'Credit eligibilities',
|
||||
@@ -73,8 +73,8 @@ class Migration(migrations.Migration):
|
||||
('username', models.CharField(max_length=255, db_index=True)),
|
||||
('parameters', jsonfield.fields.JSONField()),
|
||||
('status', models.CharField(default=b'pending', max_length=255, choices=[(b'pending', b'Pending'), (b'approved', b'Approved'), (b'rejected', b'Rejected')])),
|
||||
('course', models.ForeignKey(related_name='credit_requests', to='credit.CreditCourse')),
|
||||
('provider', models.ForeignKey(related_name='credit_requests', to='credit.CreditProvider')),
|
||||
('course', models.ForeignKey(related_name='credit_requests', to='credit.CreditCourse', on_delete=models.CASCADE)),
|
||||
('provider', models.ForeignKey(related_name='credit_requests', to='credit.CreditProvider', on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'get_latest_by': 'created',
|
||||
@@ -92,7 +92,7 @@ class Migration(migrations.Migration):
|
||||
('order', models.PositiveIntegerField(default=0)),
|
||||
('criteria', jsonfield.fields.JSONField()),
|
||||
('active', models.BooleanField(default=True)),
|
||||
('course', models.ForeignKey(related_name='credit_requirements', to='credit.CreditCourse')),
|
||||
('course', models.ForeignKey(related_name='credit_requirements', to='credit.CreditCourse', on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'ordering': ['order'],
|
||||
@@ -107,7 +107,7 @@ class Migration(migrations.Migration):
|
||||
('username', models.CharField(max_length=255, db_index=True)),
|
||||
('status', models.CharField(max_length=32, choices=[(b'satisfied', b'satisfied'), (b'failed', b'failed'), (b'declined', b'declined')])),
|
||||
('reason', jsonfield.fields.JSONField(default={})),
|
||||
('requirement', models.ForeignKey(related_name='statuses', to='credit.CreditRequirement')),
|
||||
('requirement', models.ForeignKey(related_name='statuses', to='credit.CreditRequirement', on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
|
||||
@@ -284,7 +284,7 @@ class CreditRequirement(TimeStampedModel):
|
||||
may need to determine whether a user has satisfied the requirement.
|
||||
"""
|
||||
|
||||
course = models.ForeignKey(CreditCourse, related_name="credit_requirements")
|
||||
course = models.ForeignKey(CreditCourse, related_name="credit_requirements", on_delete=models.CASCADE)
|
||||
namespace = models.CharField(max_length=255)
|
||||
name = models.CharField(max_length=255)
|
||||
display_name = models.CharField(max_length=255, default="")
|
||||
@@ -427,7 +427,7 @@ class CreditRequirementStatus(TimeStampedModel):
|
||||
)
|
||||
|
||||
username = models.CharField(max_length=255, db_index=True)
|
||||
requirement = models.ForeignKey(CreditRequirement, related_name="statuses")
|
||||
requirement = models.ForeignKey(CreditRequirement, related_name="statuses", on_delete=models.CASCADE)
|
||||
status = models.CharField(max_length=32, choices=REQUIREMENT_STATUS_CHOICES)
|
||||
|
||||
# Include additional information about why the user satisfied or failed
|
||||
@@ -543,7 +543,7 @@ def default_deadline_for_credit_eligibility(): # pylint: disable=invalid-name
|
||||
class CreditEligibility(TimeStampedModel):
|
||||
""" A record of a user's eligibility for credit for a specific course. """
|
||||
username = models.CharField(max_length=255, db_index=True)
|
||||
course = models.ForeignKey(CreditCourse, related_name="eligibilities")
|
||||
course = models.ForeignKey(CreditCourse, related_name="eligibilities", on_delete=models.CASCADE)
|
||||
|
||||
# Deadline for when credit eligibility will expire.
|
||||
# Once eligibility expires, users will no longer be able to purchase
|
||||
@@ -656,8 +656,8 @@ class CreditRequest(TimeStampedModel):
|
||||
|
||||
uuid = models.CharField(max_length=32, unique=True, db_index=True)
|
||||
username = models.CharField(max_length=255, db_index=True)
|
||||
course = models.ForeignKey(CreditCourse, related_name="credit_requests")
|
||||
provider = models.ForeignKey(CreditProvider, related_name="credit_requests")
|
||||
course = models.ForeignKey(CreditCourse, related_name="credit_requests", on_delete=models.CASCADE)
|
||||
provider = models.ForeignKey(CreditProvider, related_name="credit_requests", on_delete=models.CASCADE)
|
||||
parameters = JSONField()
|
||||
|
||||
REQUEST_STATUS_PENDING = "pending"
|
||||
|
||||
@@ -30,7 +30,7 @@ class Migration(migrations.Migration):
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('rule_type', models.CharField(default=b'blacklist', help_text='Whether to include or exclude the given course. If whitelist countries are specified, then ONLY users from whitelisted countries will be able to access the course. If blacklist countries are specified, then users from blacklisted countries will NOT be able to access the course.', max_length=255, choices=[(b'whitelist', b'Whitelist (allow only these countries)'), (b'blacklist', b'Blacklist (block these countries)')])),
|
||||
('country', models.ForeignKey(help_text='The country to which this rule applies.', to='embargo.Country')),
|
||||
('country', models.ForeignKey(help_text='The country to which this rule applies.', to='embargo.Country', on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
@@ -95,7 +95,7 @@ class Migration(migrations.Migration):
|
||||
migrations.AddField(
|
||||
model_name='countryaccessrule',
|
||||
name='restricted_course',
|
||||
field=models.ForeignKey(help_text='The course to which this rule applies.', to='embargo.RestrictedCourse'),
|
||||
field=models.ForeignKey(help_text='The course to which this rule applies.', to='embargo.RestrictedCourse', on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='countryaccessrule',
|
||||
|
||||
@@ -428,12 +428,14 @@ class CountryAccessRule(models.Model):
|
||||
|
||||
restricted_course = models.ForeignKey(
|
||||
"RestrictedCourse",
|
||||
help_text=ugettext_lazy(u"The course to which this rule applies.")
|
||||
help_text=ugettext_lazy(u"The course to which this rule applies."),
|
||||
on_delete=models.CASCADE,
|
||||
)
|
||||
|
||||
country = models.ForeignKey(
|
||||
"Country",
|
||||
help_text=ugettext_lazy(u"The country to which this rule applies.")
|
||||
help_text=ugettext_lazy(u"The country to which this rule applies."),
|
||||
on_delete=models.CASCADE,
|
||||
)
|
||||
|
||||
CACHE_KEY = u"embargo.allowed_countries.{course_key}"
|
||||
|
||||
@@ -24,7 +24,7 @@ class Migration(migrations.Migration):
|
||||
('internal_password', models.CharField(max_length=31, blank=True)),
|
||||
('dtcreated', models.DateTimeField(auto_now_add=True, verbose_name=b'creation date')),
|
||||
('dtsignup', models.DateTimeField(null=True, verbose_name=b'signup date')),
|
||||
('user', models.OneToOneField(null=True, to=settings.AUTH_USER_MODEL)),
|
||||
('user', models.OneToOneField(null=True, to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
|
||||
@@ -26,7 +26,7 @@ class ExternalAuthMap(models.Model):
|
||||
external_credentials = models.TextField(blank=True) # JSON dictionary
|
||||
external_email = models.CharField(max_length=255, db_index=True)
|
||||
external_name = models.CharField(blank=True, max_length=255, db_index=True)
|
||||
user = models.OneToOneField(User, unique=True, db_index=True, null=True)
|
||||
user = models.OneToOneField(User, unique=True, db_index=True, null=True, on_delete=models.CASCADE)
|
||||
internal_password = models.CharField(blank=True, max_length=31) # randomly generated
|
||||
dtcreated = models.DateTimeField('creation date', auto_now_add=True)
|
||||
dtsignup = models.DateTimeField('signup date', null=True) # set after signup
|
||||
|
||||
@@ -16,7 +16,7 @@ class Migration(migrations.Migration):
|
||||
name='RestrictedApplication',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('application', models.ForeignKey(to=settings.OAUTH2_PROVIDER_APPLICATION_MODEL)),
|
||||
('application', models.ForeignKey(to=settings.OAUTH2_PROVIDER_APPLICATION_MODEL, on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
||||
@@ -18,7 +18,7 @@ class RestrictedApplication(models.Model):
|
||||
so that they cannot be used to call into APIs.
|
||||
"""
|
||||
|
||||
application = models.ForeignKey(oauth2_settings.APPLICATION_MODEL, null=False)
|
||||
application = models.ForeignKey(oauth2_settings.APPLICATION_MODEL, null=False, on_delete=models.CASCADE)
|
||||
|
||||
def __unicode__(self):
|
||||
"""
|
||||
|
||||
@@ -22,7 +22,7 @@ class Migration(migrations.Migration):
|
||||
('active', models.BooleanField(default=True, help_text='Indicates if this schedule is actively used')),
|
||||
('start', models.DateTimeField(help_text='Date this schedule went into effect')),
|
||||
('upgrade_deadline', models.DateTimeField(help_text='Deadline by which the learner must upgrade to a verified seat', null=True, blank=True)),
|
||||
('enrollment', models.OneToOneField(to='student.CourseEnrollment')),
|
||||
('enrollment', models.OneToOneField(to='student.CourseEnrollment', on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Schedule',
|
||||
|
||||
@@ -25,7 +25,7 @@ class Migration(migrations.Migration):
|
||||
('enqueue_recurring_nudge', models.BooleanField(default=False)),
|
||||
('deliver_recurring_nudge', models.BooleanField(default=False)),
|
||||
('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
|
||||
('site', models.ForeignKey(to='sites.Site')),
|
||||
('site', models.ForeignKey(to='sites.Site', on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('-change_date',),
|
||||
|
||||
@@ -16,7 +16,7 @@ class Migration(migrations.Migration):
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('experience_type', models.PositiveSmallIntegerField(default=0, choices=[(0, b'Recurring Nudge and Upgrade Reminder'), (1, b'Course Updates')])),
|
||||
('schedule', models.OneToOneField(related_name='experience', to='schedules.Schedule')),
|
||||
('schedule', models.OneToOneField(related_name='experience', to='schedules.Schedule', on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
||||
@@ -8,7 +8,7 @@ from config_models.models import ConfigurationModel
|
||||
|
||||
|
||||
class Schedule(TimeStampedModel):
|
||||
enrollment = models.OneToOneField('student.CourseEnrollment', null=False)
|
||||
enrollment = models.OneToOneField('student.CourseEnrollment', null=False, on_delete=models.CASCADE)
|
||||
active = models.BooleanField(
|
||||
default=True,
|
||||
help_text=_('Indicates if this schedule is actively used')
|
||||
@@ -38,7 +38,7 @@ class Schedule(TimeStampedModel):
|
||||
class ScheduleConfig(ConfigurationModel):
|
||||
KEY_FIELDS = ('site',)
|
||||
|
||||
site = models.ForeignKey(Site)
|
||||
site = models.ForeignKey(Site, on_delete=models.CASCADE)
|
||||
create_schedules = models.BooleanField(default=False)
|
||||
enqueue_recurring_nudge = models.BooleanField(default=False)
|
||||
deliver_recurring_nudge = models.BooleanField(default=False)
|
||||
@@ -55,5 +55,5 @@ class ScheduleExperience(models.Model):
|
||||
(1, 'course_updates', 'Course Updates')
|
||||
)
|
||||
|
||||
schedule = models.OneToOneField(Schedule, related_name='experience')
|
||||
schedule = models.OneToOneField(Schedule, related_name='experience', on_delete=models.CASCADE)
|
||||
experience_type = models.PositiveSmallIntegerField(choices=EXPERIENCES, default=EXPERIENCES.default)
|
||||
|
||||
@@ -19,7 +19,7 @@ class Migration(migrations.Migration):
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('values', jsonfield.fields.JSONField(blank=True)),
|
||||
('site', models.OneToOneField(related_name='configuration', to='sites.Site')),
|
||||
('site', models.OneToOneField(related_name='configuration', to='sites.Site', on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
@@ -29,7 +29,7 @@ class Migration(migrations.Migration):
|
||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
||||
('values', jsonfield.fields.JSONField(blank=True)),
|
||||
('site', models.ForeignKey(related_name='configuration_histories', to='sites.Site')),
|
||||
('site', models.ForeignKey(related_name='configuration_histories', to='sites.Site', on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('-modified', '-created'),
|
||||
|
||||
@@ -23,7 +23,7 @@ class SiteConfiguration(models.Model):
|
||||
site (OneToOneField): one to one field relating each configuration to a single site
|
||||
values (JSONField): json field to store configurations for a site
|
||||
"""
|
||||
site = models.OneToOneField(Site, related_name='configuration')
|
||||
site = models.OneToOneField(Site, related_name='configuration', on_delete=models.CASCADE)
|
||||
enabled = models.BooleanField(default=False, verbose_name="Enabled")
|
||||
values = JSONField(
|
||||
null=False,
|
||||
@@ -122,7 +122,7 @@ class SiteConfigurationHistory(TimeStampedModel):
|
||||
site (ForeignKey): foreign-key to django Site
|
||||
values (JSONField): json field to store configurations for a site
|
||||
"""
|
||||
site = models.ForeignKey(Site, related_name='configuration_histories')
|
||||
site = models.ForeignKey(Site, related_name='configuration_histories', on_delete=models.CASCADE)
|
||||
enabled = models.BooleanField(default=False, verbose_name="Enabled")
|
||||
values = JSONField(
|
||||
null=False,
|
||||
|
||||
@@ -16,7 +16,7 @@ class Migration(migrations.Migration):
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('theme_dir_name', models.CharField(max_length=255)),
|
||||
('site', models.ForeignKey(related_name='themes', to='sites.Site')),
|
||||
('site', models.ForeignKey(related_name='themes', to='sites.Site', on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
||||
@@ -12,7 +12,7 @@ class SiteTheme(models.Model):
|
||||
`site` field is foreignkey to django Site model
|
||||
`theme_dir_name` contains directory name having Site's theme
|
||||
"""
|
||||
site = models.ForeignKey(Site, related_name='themes')
|
||||
site = models.ForeignKey(Site, related_name='themes', on_delete=models.CASCADE)
|
||||
theme_dir_name = models.CharField(max_length=255)
|
||||
|
||||
def __unicode__(self):
|
||||
|
||||
@@ -23,7 +23,7 @@ class Migration(migrations.Migration):
|
||||
('key', models.CharField(max_length=255, db_index=True)),
|
||||
('course_id', CourseKeyField(max_length=255, db_index=True)),
|
||||
('value', models.TextField()),
|
||||
('user', models.ForeignKey(related_name='+', to=settings.AUTH_USER_MODEL)),
|
||||
('user', models.ForeignKey(related_name='+', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
@@ -35,7 +35,7 @@ class Migration(migrations.Migration):
|
||||
('key', models.CharField(max_length=255, db_index=True)),
|
||||
('org', models.CharField(max_length=255, db_index=True)),
|
||||
('value', models.TextField()),
|
||||
('user', models.ForeignKey(related_name='+', to=settings.AUTH_USER_MODEL)),
|
||||
('user', models.ForeignKey(related_name='+', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
@@ -44,7 +44,7 @@ class Migration(migrations.Migration):
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('key', models.CharField(db_index=True, max_length=255, validators=[django.core.validators.RegexValidator(b'[-_a-zA-Z0-9]+')])),
|
||||
('value', models.TextField()),
|
||||
('user', models.ForeignKey(related_name='preferences', to=settings.AUTH_USER_MODEL)),
|
||||
('user', models.ForeignKey(related_name='preferences', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
|
||||
@@ -35,7 +35,7 @@ class RetirementStateError(Exception):
|
||||
class UserPreference(models.Model):
|
||||
"""A user's preference, stored as generic text to be processed by client"""
|
||||
KEY_REGEX = r"[-_a-zA-Z0-9]+"
|
||||
user = models.ForeignKey(User, db_index=True, related_name="preferences")
|
||||
user = models.ForeignKey(User, db_index=True, related_name="preferences", on_delete=models.CASCADE)
|
||||
key = models.CharField(max_length=255, db_index=True, validators=[RegexValidator(KEY_REGEX)])
|
||||
value = models.TextField()
|
||||
|
||||
@@ -113,7 +113,7 @@ class UserCourseTag(models.Model):
|
||||
Per-course user tags, to be used by various things that want to store tags about
|
||||
the user. Added initially to store assignment to experimental groups.
|
||||
"""
|
||||
user = models.ForeignKey(User, db_index=True, related_name="+")
|
||||
user = models.ForeignKey(User, db_index=True, related_name="+", on_delete=models.CASCADE)
|
||||
key = models.CharField(max_length=255, db_index=True)
|
||||
course_id = CourseKeyField(max_length=255, db_index=True)
|
||||
value = models.TextField()
|
||||
@@ -129,7 +129,7 @@ class UserOrgTag(TimeStampedModel, DeletableByUserValue): # pylint: disable=mod
|
||||
Allows settings to be configured at an organization level.
|
||||
|
||||
"""
|
||||
user = models.ForeignKey(User, db_index=True, related_name="+")
|
||||
user = models.ForeignKey(User, db_index=True, related_name="+", on_delete=models.CASCADE)
|
||||
key = models.CharField(max_length=255, db_index=True)
|
||||
org = models.CharField(max_length=255, db_index=True)
|
||||
value = models.TextField()
|
||||
@@ -173,7 +173,7 @@ class UserRetirementRequest(TimeStampedModel):
|
||||
Users that have requested to cancel their retirement before retirement begins can be removed.
|
||||
All other retired users persist in this table forever.
|
||||
"""
|
||||
user = models.OneToOneField(User)
|
||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||
|
||||
class Meta(object):
|
||||
verbose_name = 'User Retirement Request'
|
||||
@@ -203,14 +203,14 @@ class UserRetirementStatus(TimeStampedModel):
|
||||
"""
|
||||
Tracks the progress of a user's retirement request
|
||||
"""
|
||||
user = models.OneToOneField(User)
|
||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||
original_username = models.CharField(max_length=150, db_index=True)
|
||||
original_email = models.EmailField(db_index=True)
|
||||
original_name = models.CharField(max_length=255, blank=True, db_index=True)
|
||||
retired_username = models.CharField(max_length=150, db_index=True)
|
||||
retired_email = models.EmailField(db_index=True)
|
||||
current_state = models.ForeignKey(RetirementState, related_name='current_state')
|
||||
last_state = models.ForeignKey(RetirementState, blank=True, related_name='last_state')
|
||||
current_state = models.ForeignKey(RetirementState, related_name='current_state', on_delete=models.CASCADE)
|
||||
last_state = models.ForeignKey(RetirementState, blank=True, related_name='last_state', on_delete=models.CASCADE)
|
||||
responses = models.TextField()
|
||||
|
||||
class Meta(object):
|
||||
|
||||
Reference in New Issue
Block a user