diff --git a/src/apps/dashboard/migrations/0002_list_owner.py b/src/apps/dashboard/migrations/0002_list_owner.py new file mode 100644 index 0000000..df4b4cc --- /dev/null +++ b/src/apps/dashboard/migrations/0002_list_owner.py @@ -0,0 +1,21 @@ +# Generated by Django 6.0 on 2026-02-09 03:29 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dashboard', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='list', + name='owner', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='lists', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/src/apps/dashboard/models.py b/src/apps/dashboard/models.py index d4e3e2c..a439ace 100644 --- a/src/apps/dashboard/models.py +++ b/src/apps/dashboard/models.py @@ -2,6 +2,14 @@ from django.db import models from django.urls import reverse class List(models.Model): + owner = models.ForeignKey( + "lyric.User", + related_name="lists", + blank=True, + null=True, + on_delete=models.CASCADE, + ) + def get_absolute_url(self): return reverse("view_list", args=[self.id]) diff --git a/src/apps/dashboard/tests/test_models.py b/src/apps/dashboard/tests/test_models.py index 3408bee..0ac4457 100644 --- a/src/apps/dashboard/tests/test_models.py +++ b/src/apps/dashboard/tests/test_models.py @@ -2,6 +2,7 @@ from django.core.exceptions import ValidationError from django.db.utils import IntegrityError from django.test import TestCase from ..models import Item, List +from apps.lyric.models import User class ItemModelTest(TestCase): def test_default_text(self): @@ -59,3 +60,11 @@ class ListModelTest(TestCase): list(list1.item_set.all()), [item1, item2, item3], ) + + def test_lists_can_have_owners(self): + user = User.objects.create(email="a@b.cde") + mylist = List.objects.create(owner=user) + self.assertIn(mylist, user.lists.all()) + + def test_list_owner_is_optional(self): + List.objects.create() diff --git a/src/apps/dashboard/views.py b/src/apps/dashboard/views.py index 9aa7d4a..8ef57c4 100644 --- a/src/apps/dashboard/views.py +++ b/src/apps/dashboard/views.py @@ -10,8 +10,9 @@ def new_list(request): form = ItemForm(data=request.POST) if form.is_valid(): nulist = List.objects.create() - nulist.owner = request.user - nulist.save() + if request.user.is_authenticated: + nulist.owner = request.user + nulist.save() form.save(for_list=nulist) return redirect(nulist) else: