diff --git a/wagtail_store/store/models.py b/wagtail_store/store/models.py index c144c08..cddf98b 100644 --- a/wagtail_store/store/models.py +++ b/wagtail_store/store/models.py @@ -539,9 +539,17 @@ class OrderDocument(models.Model): return pdfkit.from_string(content, False) -@receiver(saved_file) -def generate_thumbnails_async(sender, fieldfile, **kwargs): - generate_thumbnails.delay( - model=sender, pk=fieldfile.instance.pk, - field=fieldfile.field.name - ) +# Consider ordering +class StorePage(Page): + store = models.OneToOneField("store_api.Store", on_delete=models.CASCADE, related_name="page") + description = wagtail_fields.RichTextField(blank=True) + tags = TaggableManager(blank=True) + + +class AllProductsListPage(Page): + store = models.OneToOneField("store_api.Store", on_delete=models.CASCADE, related_name="all_products_list") + + +class GroupListPage(Page): + store = models.ForeignKey("store_api.Store", on_delete=models.CASCADE, related_name="product_lists") + group = models.OneToOneField("store_api.ProductGroup", on_delete=models.CASCADE, related_name="page") diff --git a/wagtail_store/store_api/models.py b/wagtail_store/store_api/models.py index 72c7aaa..f4e90d7 100644 --- a/wagtail_store/store_api/models.py +++ b/wagtail_store/store_api/models.py @@ -2,6 +2,9 @@ from django.db import models from django.contrib.auth.models import User from phonenumber_field.modelfields import PhoneNumberField from wagtail.models import Page +from django.dispatch import receiver +from easy_thumbnails.signals import saved_file +from wagtail_store.tasks import generate_thumbnails class PersonalData(models.Model): @@ -28,10 +31,6 @@ class PersonalData(models.Model): class StoreUser(PersonalData, models.Model): - - class Meta: - abstract = True - auth_user = models.OneToOneField(User, on_delete=models.CASCADE) @@ -57,8 +56,7 @@ class ProductGroup(models.Model): # Products class Product(models.Model): store = models.ForeignKey(Store, on_delete=models.CASCADE) - - + group = models.ForeignKey(ProductGroup, on_delete=models.CASCADE, blank=True, null=True) name = models.CharField(max_length=255) description = models.TextField(blank=True) @@ -83,3 +81,11 @@ class ProductVariant(models.Model): def __str__(self): return self.name + + +@receiver(saved_file) +def generate_thumbnails_async(sender, fieldfile, **kwargs): + generate_thumbnails.delay( + model=sender, pk=fieldfile.instance.pk, + field=fieldfile.field.name + ) diff --git a/wagtail_store/storev2/__init__.py b/wagtail_store/storev2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/wagtail_store/storev2/admin.py b/wagtail_store/storev2/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/wagtail_store/storev2/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/wagtail_store/storev2/apps.py b/wagtail_store/storev2/apps.py new file mode 100644 index 0000000..510de7b --- /dev/null +++ b/wagtail_store/storev2/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class Storev2Config(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "storev2" diff --git a/wagtail_store/storev2/migrations/__init__.py b/wagtail_store/storev2/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/wagtail_store/storev2/models.py b/wagtail_store/storev2/models.py new file mode 100644 index 0000000..c0bc0de --- /dev/null +++ b/wagtail_store/storev2/models.py @@ -0,0 +1,28 @@ +from django.db import models +from wagtail.models import Page +from wagtail import fields as wagtail_fields +from taggit.managers import TaggableManager + +from store_api.models import Product + +# Create your models here. + + +class StorePage(Page): + store = models.OneToOneField("store_api.Store", on_delete=models.CASCADE, related_name="page") + description = wagtail_fields.RichTextField(blank=True) + tags = TaggableManager(blank=True) + + +class AllProductsListPage(Page): + store = models.OneToOneField("store_api.Store", on_delete=models.CASCADE, related_name="all_products_list") + + def get_context(self, request): + context = super().get_context(request) + context["items"] = Product.objects.filter(store=self.store) + return context + + +class GroupListPage(Page): + store = models.ForeignKey("store_api.Store", on_delete=models.CASCADE, related_name="product_lists") + group = models.OneToOneField("store_api.ProductGroup", on_delete=models.CASCADE, related_name="page") diff --git a/wagtail_store/storev2/tests.py b/wagtail_store/storev2/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/wagtail_store/storev2/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/wagtail_store/storev2/views.py b/wagtail_store/storev2/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/wagtail_store/storev2/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/wagtail_store/wagtail_store/settings/base.py b/wagtail_store/wagtail_store/settings/base.py index 1e4877b..ee465f4 100644 --- a/wagtail_store/wagtail_store/settings/base.py +++ b/wagtail_store/wagtail_store/settings/base.py @@ -39,6 +39,7 @@ SENTRY_ENVIRONMENT = os.environ.get("SENTRY_ENVIRONMENT", '') INSTALLED_APPS = [ "home", "store", + "store_api", "mailings", "blog", "search",