merge conflix
This commit is contained in:
@@ -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',
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1,10 +1,21 @@
|
||||
from django.contrib import admin
|
||||
|
||||
from . import models
|
||||
from . import forms
|
||||
|
||||
# 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.CategoryTag)
|
||||
admin.site.register(models.AttributeTag)
|
||||
|
||||
14
products/forms.py
Normal file
14
products/forms.py
Normal 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')
|
||||
}
|
||||
@@ -34,7 +34,6 @@ class AttributeTag(TagTreeModel):
|
||||
# autocomplete_view = 'myapp.views.hobbies_autocomplete'
|
||||
|
||||
|
||||
|
||||
class Product(models.Model):
|
||||
|
||||
SYNCHRONIZED = 'SYNCHRONIZED'
|
||||
@@ -63,7 +62,7 @@ class Product(models.Model):
|
||||
stock = models.PositiveIntegerField('Stock', null=True, blank=True)
|
||||
tags = TagField(to=TreeTag, blank=True)
|
||||
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)
|
||||
|
||||
# internal
|
||||
|
||||
@@ -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,19 @@ 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 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]
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user