From 94a161fe09034f44693647a5163bd4b94fecbfb2 Mon Sep 17 00:00:00 2001 From: Disco DeDisco Date: Sun, 8 Feb 2026 22:33:15 -0500 Subject: [PATCH] List objects now container owner values, saved upon creation, linked to user fk; apps.dashboard.views updated accordingly; 36 UTs passing (2 new) --- .../dashboard/migrations/0002_list_owner.py | 21 +++++++++++++++++++ src/apps/dashboard/models.py | 8 +++++++ src/apps/dashboard/tests/test_models.py | 9 ++++++++ src/apps/dashboard/views.py | 5 +++-- 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/apps/dashboard/migrations/0002_list_owner.py 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: