From 71d5834abedbdecb45184b31170871c101ea3f51 Mon Sep 17 00:00:00 2001 From: Diego Calvo Date: Fri, 28 Jan 2022 15:23:40 +0100 Subject: [PATCH] edit parent_category in admin --- back_latienda/urls.py | 2 +- products/admin.py | 8 +++++++- products/forms.py | 27 ++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/back_latienda/urls.py b/back_latienda/urls.py index b7b27b1..ab6348a 100644 --- a/back_latienda/urls.py +++ b/back_latienda/urls.py @@ -55,7 +55,7 @@ urlpatterns = [ path('api/v1/sync_shop/', product_views.sync_shop, name='purchase-email'), path('api/v1/products/all_categories/', product_views.all_categories, name='all-categories'), 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/autocomplete/category-tag/', product_views.CategoryTagAutocomplete.as_view(), name='category-tag-autocomplete'), path('api/v1/', include(router.urls)), path('sentry-debug/', trigger_error), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/products/admin.py b/products/admin.py index 8d42fcb..74b8938 100644 --- a/products/admin.py +++ b/products/admin.py @@ -1,4 +1,5 @@ from django.contrib import admin +from tagulous.admin import TagModelAdmin from django_admin_listfilter_dropdown.filters import DropdownFilter, RelatedDropdownFilter, ChoiceDropdownFilter @@ -23,8 +24,13 @@ class ProductAdmin(admin.ModelAdmin): search_fields = ('name', 'sku', 'description') +class CategoryTagAdmin(TagModelAdmin): + form = forms.CategoryTagForm + list_display = ('label', 'name') + search_fields = ('label', 'name', 'slug') + admin.site.register(models.Product, ProductAdmin) admin.site.register(models.TreeTag) -admin.site.register(models.CategoryTag) +admin.site.register(models.CategoryTag, CategoryTagAdmin) admin.site.register(models.AttributeTag) diff --git a/products/forms.py b/products/forms.py index 9ef26b5..afca0f9 100644 --- a/products/forms.py +++ b/products/forms.py @@ -1,3 +1,4 @@ +from email.policy import default from dal import autocomplete from django import forms @@ -10,5 +11,29 @@ class ProductTagForm(forms.ModelForm): model = Product fields = ('__all__') widgets = { - 'category': autocomplete.TagSelect2(url='category-autocomplete') + 'category': autocomplete.TagSelect2(url='category-tag-autocomplete') } + +class CategoryTagForm(forms.ModelForm): + name = forms.CharField(required=False, disabled=True) + parent_category = autocomplete.Select2ListCreateChoiceField(required=False, widget=autocomplete.Select2(url='category-tag-autocomplete', attrs={"data-tags": "true"})) + class Meta: + model = CategoryTag + fields = ('name', 'label', 'slug', 'parent_category') + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if self.instance.id: + project_name_field = self.fields['parent_category'] + parent_category = self.instance.parent + project_name_field.initial = parent_category + project_name_field.choices = [(parent_category, parent_category)] + + + def save(self, commit=True): + parent_name = self.cleaned_data.get('parent_category', None) + prefix = '' + if parent_name: + prefix = parent_name + '/' + self.instance.name = prefix + self.instance.label + return super(CategoryTagForm, self).save(commit=commit) \ No newline at end of file