diff --git a/test_settings.py b/test_settings.py index 69a6812..3504457 100644 --- a/test_settings.py +++ b/test_settings.py @@ -75,3 +75,5 @@ LOGGING = { "django.request": {"handlers": ["console"], "level": "DEBUG", "propagate": True}, }, } + +TODO_TASK_MODEL = "todo.Task" diff --git a/todo/admin.py b/todo/admin.py index a8e6d13..d913b48 100644 --- a/todo/admin.py +++ b/todo/admin.py @@ -1,6 +1,8 @@ from django.contrib import admin +import swapper +from todo.models import Attachment, Comment, TaskList -from todo.models import Attachment, Comment, Task, TaskList +Task = swapper.load_model("todo", "Task") class TaskAdmin(admin.ModelAdmin): diff --git a/todo/apps.py b/todo/apps.py new file mode 100644 index 0000000..521b855 --- /dev/null +++ b/todo/apps.py @@ -0,0 +1,11 @@ +from django.apps import AppConfig + + +class TodoConfig(AppConfig): + name = "todo" + + def ready(self): + # Credit: https://stackoverflow.com/a/47154840/885053 + from django.conf import settings + settings = settings._wrapped.__dict__ + settings.setdefault("TODO_TASK_MODEL", "todo.Task") diff --git a/todo/migrations/0011_swappable_task.py b/todo/migrations/0011_swappable_task.py index 3227797..3bbbdef 100644 --- a/todo/migrations/0011_swappable_task.py +++ b/todo/migrations/0011_swappable_task.py @@ -73,4 +73,9 @@ class Migration(migrations.Migration): to="todo.BaseTask", ), ), + migrations.AlterField( + model_name='basetask', + name='task_list', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.TODO_TASK_MODEL), + ), ] diff --git a/todo/models.py b/todo/models.py index 33a0cc7..1309f3f 100644 --- a/todo/models.py +++ b/todo/models.py @@ -71,7 +71,7 @@ class TaskList(models.Model): class BaseTask(models.Model): title = models.CharField(max_length=140) - task_list = models.ForeignKey(TaskList, on_delete=models.CASCADE, null=True) + task_list = models.ForeignKey(settings.TODO_TASK_MODEL, on_delete=models.CASCADE, null=True) created_date = models.DateField(default=timezone.now, blank=True, null=True) due_date = models.DateField(blank=True, null=True) completed = models.BooleanField(default=False) @@ -140,7 +140,7 @@ class Comment(models.Model): author = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True ) - task = models.ForeignKey(Task, on_delete=models.CASCADE) + task = models.ForeignKey("Task", on_delete=models.CASCADE) date = models.DateTimeField(default=datetime.datetime.now) email_from = models.CharField(max_length=320, blank=True, null=True) email_message_id = models.CharField(max_length=255, blank=True, null=True) @@ -174,7 +174,7 @@ class Attachment(models.Model): Defines a generic file attachment for use in M2M relation with Task. """ - task = models.ForeignKey(Task, on_delete=models.CASCADE) + task = models.ForeignKey(settings.TODO_TASK_MODEL, on_delete=models.CASCADE) added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) timestamp = models.DateTimeField(default=datetime.datetime.now) file = models.FileField(upload_to=get_attachment_upload_dir, max_length=255)