From 657b717c0703434ef998af2fb58ba84ca55c862b Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 4 Mar 2021 12:37:15 +0000 Subject: [PATCH] working to fix tag widgets in admin --- back_latienda/settings/base.py | 4 +++- back_latienda/urls.py | 1 + products/admin.py | 13 ++++++++++++- products/forms.py | 14 ++++++++++++++ products/models.py | 1 - products/views.py | 20 +++++++++++++++++++- requirements.txt | 1 + 7 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 products/forms.py diff --git a/back_latienda/settings/base.py b/back_latienda/settings/base.py index 0859a1c..cdb5888 100644 --- a/back_latienda/settings/base.py +++ b/back_latienda/settings/base.py @@ -34,8 +34,11 @@ SECRET_KEY = 'td*#7t-(1e9^(g0cod*hs**dp(%zvg@=$cug_-dtzcj#i2mrz@' # Application definition INSTALLED_APPS = [ + 'dal', + 'dal_select2', 'suit', + 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -54,7 +57,6 @@ INSTALLED_APPS = [ 'anymail', 'storages', - # local apps 'core', 'geo', diff --git a/back_latienda/urls.py b/back_latienda/urls.py index 3dd674f..508c0f5 100644 --- a/back_latienda/urls.py +++ b/back_latienda/urls.py @@ -42,5 +42,6 @@ urlpatterns = [ path('api/v1/my_company/', company_views.my_company , name='my-company'), path('api/v1/my_products/', product_views.my_products, name='my-products'), path('api/v1/stats/me/', stat_views.track_user, name='user-tracker'), + path('api/v1/autocomplete/category-tag/', product_views.CategoryTagAutocomplete.as_view(), name='category-autocomplete'), path('api/v1/', include(router.urls)), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/products/admin.py b/products/admin.py index af39311..b90c08f 100644 --- a/products/admin.py +++ b/products/admin.py @@ -1,10 +1,21 @@ from django.contrib import admin from . import models +from . import forms # Register your models here. +class CagtegoryAdmin(admin.ModelAdmin): + form = forms.CategoryTagForm + + + +class CategoryInline(admin.TabularInline): + model = models.CategoryTag + form = forms.CategoryTagForm + + admin.site.register(models.Product) admin.site.register(models.TreeTag) -admin.site.register(models.CategoryTag) +admin.site.register(models.CategoryTag, CagtegoryAdmin) admin.site.register(models.AttributeTag) diff --git a/products/forms.py b/products/forms.py new file mode 100644 index 0000000..456df98 --- /dev/null +++ b/products/forms.py @@ -0,0 +1,14 @@ +from dal import autocomplete + +from django import forms + +from .models import CategoryTag + + +class CategoryTagForm(forms.ModelForm): + class Meta: + model = CategoryTag + fields = ('__all__') + widgets = { + 'category': autocomplete.ModelSelect2(url='cagtegory-autocomplete') + } diff --git a/products/models.py b/products/models.py index 699ab0a..27062b9 100644 --- a/products/models.py +++ b/products/models.py @@ -34,7 +34,6 @@ class AttributeTag(TagTreeModel): # autocomplete_view = 'myapp.views.hobbies_autocomplete' - class Product(models.Model): SYNCHRONIZED = 'SYNCHRONIZED' diff --git a/products/views.py b/products/views.py index c7dd670..35ac069 100644 --- a/products/views.py +++ b/products/views.py @@ -16,10 +16,11 @@ from rest_framework.filters import OrderingFilter from django_filters.rest_framework import DjangoFilterBackend import requests -from products.models import Product +from products.models import Product, CategoryTag from products.serializers import ProductSerializer, TagFilterSerializer, SearchResultSerializer from companies.models import Company from history.models import HistorySync +from dal import autocomplete from back_latienda.permissions import IsCreator from .utils import extract_search_filters, find_related_products_v3, find_related_products_v6, product_loader @@ -214,3 +215,20 @@ def product_search(request): return Response(data={"filters": filters, "count": total_results, "products": result_list, 'prices': prices}) except Exception as e: return Response({"errors": {"details": str(e)}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + + +class CategoryTagAutocomplete(autocomplete.Select2QuerySetView): + def get_queryset(self): + # Get the tag model dynamically + Tag = Product.category.tag_model + + # Return nothing if not auth + if not self.request.is_authenticated(): + return Tag.objects.none() + + qs = Tag.objects.all() + + if self.q: + qs = qs.filter(name__istartswith=self.q) + + return self.q diff --git a/requirements.txt b/requirements.txt index 0c7f6f8..5b07f13 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,6 +14,7 @@ drf-extra-fields==3.0.4 django-ipware==3.0.2 geoip2==4.1.0 woocommerce==2.1.1 +django-autocomplete-light==3.8.2 # manually install `pip install --default-timeout=100 future` to avoid wcapi to timeout # required for production django-anymail[amazon_ses]==8.2