From 3ec3ddbbe806a5167b5bf5ed6f5eeb70f7d64ebb Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Sun, 14 Feb 2021 07:24:35 +0100 Subject: [PATCH] (WIP) Add Wishlist app Now only models --- wish/settings.py | 1 + wish/urls.py | 5 ++-- wishlist/__init__.py | 0 wishlist/admin.py | 3 ++ wishlist/apps.py | 5 ++++ wishlist/migrations/0001_initial.py | 46 +++++++++++++++++++++++++++++ wishlist/migrations/__init__.py | 0 wishlist/models.py | 30 +++++++++++++++++++ wishlist/tests.py | 3 ++ wishlist/urls.py | 8 +++++ wishlist/views.py | 3 ++ 11 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 wishlist/__init__.py create mode 100644 wishlist/admin.py create mode 100644 wishlist/apps.py create mode 100644 wishlist/migrations/0001_initial.py create mode 100644 wishlist/migrations/__init__.py create mode 100644 wishlist/models.py create mode 100644 wishlist/tests.py create mode 100644 wishlist/urls.py create mode 100644 wishlist/views.py diff --git a/wish/settings.py b/wish/settings.py index 1fad2d7..48f708a 100644 --- a/wish/settings.py +++ b/wish/settings.py @@ -39,6 +39,7 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'utils', + 'wishlist', ] MIDDLEWARE = [ diff --git a/wish/urls.py b/wish/urls.py index 29c00b1..b0ec98f 100644 --- a/wish/urls.py +++ b/wish/urls.py @@ -14,8 +14,9 @@ Including another URLconf 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path +from django.urls import path, include urlpatterns = [ - path('admin/', admin.site.urls), + path('admin/', admin.site.urls), + path('', include('wishlist.urls')), ] diff --git a/wishlist/__init__.py b/wishlist/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/wishlist/admin.py b/wishlist/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/wishlist/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/wishlist/apps.py b/wishlist/apps.py new file mode 100644 index 0000000..6c0d16f --- /dev/null +++ b/wishlist/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class WishlistConfig(AppConfig): + name = 'wishlist' diff --git a/wishlist/migrations/0001_initial.py b/wishlist/migrations/0001_initial.py new file mode 100644 index 0000000..f862167 --- /dev/null +++ b/wishlist/migrations/0001_initial.py @@ -0,0 +1,46 @@ +# Generated by Django 3.1.6 on 2021-02-14 07:28 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='WishList', + fields=[ + ('slug', models.SlugField(editable=False, help_text="URL suffix for this wishlist. Must not clash existing ones, nor be 'user' nor 'item'.", primary_key=True, serialize=False)), + ('name', models.TextField(help_text='The title of the wishlist.')), + ('description', models.TextField(blank=True, help_text='Optional (public) description of the wishlist.')), + ('hidden', models.BooleanField(default=True, help_text="Whether to hide on the users' list of their wishlists.")), + ('hide_granted', models.BooleanField(default=False, help_text='Whether to hide already fulfilled wishes.')), + ('owner', models.ForeignKey(help_text='The user owning this wishlist.', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='WishedItem', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('name', models.TextField(help_text='Name of the wished item.')), + ('description', models.TextField(help_text='Detailed description of the item, for example its specification.')), + ('wishlists', models.ManyToManyField(help_text='Wishlists that this wish should be part of.', related_name='wishes', to='wishlist.WishList')), + ], + ), + migrations.CreateModel( + name='DreamComeTrue', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('when', models.DateTimeField(auto_now_add=True, help_text='When the dream came true')), + ('note', models.TextField(blank=True, help_text='Optional note, e.g. tracking number. Private, shown only to owner.')), + ('item', models.ForeignKey(help_text='What wish has been fulfilled.', on_delete=django.db.models.deletion.CASCADE, to='wishlist.wisheditem')), + ], + ), + ] diff --git a/wishlist/migrations/__init__.py b/wishlist/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/wishlist/models.py b/wishlist/models.py new file mode 100644 index 0000000..d27a257 --- /dev/null +++ b/wishlist/models.py @@ -0,0 +1,30 @@ +from django.db import models +from django.conf import settings + +class WishList(models.Model): + + # Meta class? + + slug = models.SlugField(max_length=50, blank=False, primary_key=True, editable=False, help_text="URL suffix for this wishlist. Must not clash existing ones, nor be 'user' nor 'item'.") + name = models.TextField(help_text="The title of the wishlist.") + description = models.TextField(blank=True, help_text="Optional (public) description of the wishlist.") + owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, help_text="The user owning this wishlist.") + hidden = models.BooleanField(default=True, help_text="Whether to hide on the users' list of their wishlists.") + hide_granted = models.BooleanField(default=False, help_text="Whether to hide already fulfilled wishes.") + +class WishedItem(models.Model): + + # Meta class? + + id = models.AutoField(primary_key=True) + name = models.TextField(help_text="Name of the wished item.") + description = models.TextField(help_text="Detailed description of the item, for example its specification.") + wishlists = models.ManyToManyField(WishList, related_name='wishes', help_text="Wishlists that this wish should be part of.") + +# FIXME: create more sensible name... +class DreamComeTrue(models.Model): + + item = models.ForeignKey(WishedItem, on_delete=models.CASCADE, help_text="What wish has been fulfilled.") + when = models.DateTimeField(auto_now_add=True, help_text="When the dream came true") + note = models.TextField(blank=True, help_text="Optional note, e.g. tracking number. Private, shown only to owner.") + diff --git a/wishlist/tests.py b/wishlist/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/wishlist/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/wishlist/urls.py b/wishlist/urls.py new file mode 100644 index 0000000..47b6ddb --- /dev/null +++ b/wishlist/urls.py @@ -0,0 +1,8 @@ +from django.urls import path +from . import views as v + +urlpatterns = [ +# path('user/', ...), +# path('item/', ...), +# path('', ...), +] diff --git a/wishlist/views.py b/wishlist/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/wishlist/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here.