merge conflix

This commit is contained in:
Sam
2021-03-04 13:38:06 +00:00
7 changed files with 50 additions and 5 deletions

View File

@@ -34,8 +34,11 @@ SECRET_KEY = 'td*#7t-(1e9^(g0cod*hs**dp(%zvg@=$cug_-dtzcj#i2mrz@'
# Application definition # Application definition
INSTALLED_APPS = [ INSTALLED_APPS = [
'dal',
'dal_select2',
'suit', 'suit',
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.contenttypes',
@@ -54,7 +57,6 @@ INSTALLED_APPS = [
'anymail', 'anymail',
'storages', 'storages',
# local apps # local apps
'core', 'core',
'geo', 'geo',

View File

@@ -42,5 +42,6 @@ urlpatterns = [
path('api/v1/my_company/', company_views.my_company , name='my-company'), 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/my_products/', product_views.my_products, name='my-products'),
path('api/v1/stats/me/', stat_views.track_user, name='user-tracker'), 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)), path('api/v1/', include(router.urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@@ -1,10 +1,21 @@
from django.contrib import admin from django.contrib import admin
from . import models from . import models
from . import forms
# Register your models here. # Register your models here.
admin.site.register(models.Product) class ProductAdmin(admin.ModelAdmin):
form = forms.ProductTagForm
'''
class ProductInline(admin.TabularInline):
model = models.Product
form = forms.ProductTagForm
'''
admin.site.register(models.Product, ProductAdmin)
admin.site.register(models.TreeTag) admin.site.register(models.TreeTag)
admin.site.register(models.CategoryTag) admin.site.register(models.CategoryTag)
admin.site.register(models.AttributeTag) admin.site.register(models.AttributeTag)

14
products/forms.py Normal file
View File

@@ -0,0 +1,14 @@
from dal import autocomplete
from django import forms
from .models import CategoryTag, Product
class ProductTagForm(forms.ModelForm):
class Meta:
model = Product
fields = ('__all__')
widgets = {
'category': autocomplete.TagSelect2(url='category-autocomplete')
}

View File

@@ -34,7 +34,6 @@ class AttributeTag(TagTreeModel):
# autocomplete_view = 'myapp.views.hobbies_autocomplete' # autocomplete_view = 'myapp.views.hobbies_autocomplete'
class Product(models.Model): class Product(models.Model):
SYNCHRONIZED = 'SYNCHRONIZED' SYNCHRONIZED = 'SYNCHRONIZED'
@@ -63,7 +62,7 @@ class Product(models.Model):
stock = models.PositiveIntegerField('Stock', null=True, blank=True) stock = models.PositiveIntegerField('Stock', null=True, blank=True)
tags = TagField(to=TreeTag, blank=True) tags = TagField(to=TreeTag, blank=True)
category = SingleTagField(to=CategoryTag, null=True, blank=True, on_delete=models.SET_NULL) # main tag category category = SingleTagField(to=CategoryTag, null=True, blank=True, on_delete=models.SET_NULL) # main tag category
attributes = TagField(to=AttributeTag, related_name='product_attributes', blank=True) attributes = TagField(to=AttributeTag, blank=True, related_name='product_attributes')
identifiers = models.TextField('Identificador único de producto', null=True, blank=True) identifiers = models.TextField('Identificador único de producto', null=True, blank=True)
# internal # internal

View File

@@ -16,10 +16,11 @@ from rest_framework.filters import OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
import requests import requests
from products.models import Product from products.models import Product, CategoryTag
from products.serializers import ProductSerializer, TagFilterSerializer, SearchResultSerializer from products.serializers import ProductSerializer, TagFilterSerializer, SearchResultSerializer
from companies.models import Company from companies.models import Company
from history.models import HistorySync from history.models import HistorySync
from dal import autocomplete
from back_latienda.permissions import IsCreator from back_latienda.permissions import IsCreator
from .utils import extract_search_filters, find_related_products_v3, find_related_products_v6, product_loader from .utils import extract_search_filters, find_related_products_v3, find_related_products_v6, product_loader
@@ -214,3 +215,19 @@ def product_search(request):
return Response(data={"filters": filters, "count": total_results, "products": result_list, 'prices': prices}) return Response(data={"filters": filters, "count": total_results, "products": result_list, 'prices': prices})
except Exception as e: except Exception as e:
return Response({"errors": {"details": str(e)}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) 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 self.request.user.is_anonymous:
return Tag.objects.none()
qs = Tag.objects.all()
if self.q:
qs = qs.filter(name__icontains=self.q)
return qs # [x.label for x in qs]

View File

@@ -14,6 +14,7 @@ drf-extra-fields==3.0.4
django-ipware==3.0.2 django-ipware==3.0.2
geoip2==4.1.0 geoip2==4.1.0
woocommerce==2.1.1 woocommerce==2.1.1
django-autocomplete-light==3.8.2
# manually install `pip install --default-timeout=100 future` to avoid wcapi to timeout # manually install `pip install --default-timeout=100 future` to avoid wcapi to timeout
# required for production # required for production
django-anymail[amazon_ses]==8.2 django-anymail[amazon_ses]==8.2