diff --git a/.idea/dictionaries/vabene1111.xml b/.idea/dictionaries/vabene1111.xml
index aff56db5f..a9a04717e 100644
--- a/.idea/dictionaries/vabene1111.xml
+++ b/.idea/dictionaries/vabene1111.xml
@@ -3,6 +3,7 @@
dropbox
emoji
+ multiselect
\ No newline at end of file
diff --git a/cookbook/forms.py b/cookbook/forms.py
index ebd7f017a..0c85bab31 100644
--- a/cookbook/forms.py
+++ b/cookbook/forms.py
@@ -1,17 +1,17 @@
from django.utils.translation import gettext as _
from django import forms
from .models import *
-from django.forms import widgets, TextInput, DateField
+from django.forms import widgets
class MultiSelectWidget(widgets.SelectMultiple):
class Media:
- js = ('custom/js/from_multiselect.js',)
+ js = ('custom/js/form_multiselect.js',)
class EmojiWidget(forms.TextInput):
class Media:
- js = 'custom/js/form_emoji.js'
+ js = ('custom/js/form_emoji.js',)
class EditRecipeForm(forms.ModelForm):
@@ -25,15 +25,21 @@ class EditRecipeForm(forms.ModelForm):
'keywords': _('Keywords'),
'path': _('Path'),
}
+ widgets = {'keywords': MultiSelectWidget}
-class EditCategoryForm(forms.ModelForm):
- class Media:
- js = ('custom/js/form_emoji.js',)
-
+class CategoryForm(forms.ModelForm):
class Meta:
model = Category
fields = ('name', 'icon', 'description')
+ widgets = {'icon': EmojiWidget}
+
+
+class KeywordForm(forms.ModelForm):
+ class Meta:
+ model = Keyword
+ fields = ('name', 'icon', 'description')
+ widgets = {'icon': EmojiWidget}
class MonitorForm(forms.Form):
@@ -43,7 +49,10 @@ class MonitorForm(forms.Form):
class BatchEditForm(forms.Form):
search = forms.CharField(label=_('Search String'))
category = forms.ModelChoiceField(queryset=Category.objects.all().order_by('id'), required=False)
- keyword = forms.ModelMultipleChoiceField(queryset=Keyword.objects.all().order_by('id'), required=False)
+ keywords = forms.ModelMultipleChoiceField(queryset=Keyword.objects.all().order_by('id'), required=False)
+
+ class Media:
+ js = ('custom/js/form_multiselect.js',)
class ImportRecipeForm(forms.ModelForm):
@@ -57,3 +66,4 @@ class ImportRecipeForm(forms.ModelForm):
'keywords': _('Keywords'),
'path': _('Path'),
}
+ widgets = {'keywords': MultiSelectWidget}
diff --git a/cookbook/static/custom/js/form_multiselect.js b/cookbook/static/custom/js/form_multiselect.js
index 0de439074..f4a1a0601 100644
--- a/cookbook/static/custom/js/form_multiselect.js
+++ b/cookbook/static/custom/js/form_multiselect.js
@@ -1,3 +1,3 @@
$(document).ready(function () {
- $('#id_keywords').select2();
+ $('.selectmultiple').select2();
});
\ No newline at end of file
diff --git a/cookbook/templates/batch/edit.html b/cookbook/templates/batch/edit.html
index f1a8099a1..c4a10d3f4 100644
--- a/cookbook/templates/batch/edit.html
+++ b/cookbook/templates/batch/edit.html
@@ -5,6 +5,10 @@
{% block title %}{% trans 'Batch edit Category' %}{% endblock %}
+{% block extra_head %}
+ {{ form.media }}
+{% endblock %}
+
{% block content %}
@@ -23,12 +27,4 @@
-
{% endblock %}
\ No newline at end of file
diff --git a/cookbook/templates/generic/delete_template.html b/cookbook/templates/generic/delete_template.html
index 4d2f4b791..cc1f29a5c 100644
--- a/cookbook/templates/generic/delete_template.html
+++ b/cookbook/templates/generic/delete_template.html
@@ -4,6 +4,10 @@
{% block title %}{% trans 'Delete' %} - {{ title }}{% endblock %}
+{% block extra_head %}
+ {{ form.media }}
+{% endblock %}
+
{% block content %}
{% trans 'Delete' %} {{ title }}
diff --git a/cookbook/templates/generic/new_template.html b/cookbook/templates/generic/new_template.html
index a90b46076..364e4c855 100644
--- a/cookbook/templates/generic/new_template.html
+++ b/cookbook/templates/generic/new_template.html
@@ -5,6 +5,10 @@
{% block title %}{% trans 'New' %} - {{ title }}{% endblock %}
+{% block extra_head %}
+ {{ form.media }}
+{% endblock %}
+
{% block content %}
{% trans 'New' %} {{ title }}
@@ -15,15 +19,4 @@
-
-
{% endblock %}
\ No newline at end of file
diff --git a/cookbook/views/edit.py b/cookbook/views/edit.py
index 88f2092b8..0026f5e42 100644
--- a/cookbook/views/edit.py
+++ b/cookbook/views/edit.py
@@ -4,7 +4,7 @@ from django.urls import reverse_lazy, reverse
from django.utils.translation import gettext as _
from django.views.generic import UpdateView, DeleteView
-from cookbook.forms import EditRecipeForm, EditCategoryForm
+from cookbook.forms import EditRecipeForm, CategoryForm, KeywordForm
from cookbook.models import Recipe, Category, Sync, Keyword, RecipeImport
@@ -27,7 +27,7 @@ class MonitorUpdate(LoginRequiredMixin, UpdateView):
class CategoryUpdate(LoginRequiredMixin, UpdateView):
template_name = "generic\edit_template.html"
model = Category
- form_class = EditCategoryForm
+ form_class = CategoryForm
# TODO add msg box
@@ -43,7 +43,7 @@ class CategoryUpdate(LoginRequiredMixin, UpdateView):
class KeywordUpdate(LoginRequiredMixin, UpdateView):
template_name = "generic\edit_template.html"
model = Keyword
- fields = ['name', 'icon', 'description']
+ form_class = KeywordForm
# TODO add msg box
diff --git a/cookbook/views/new.py b/cookbook/views/new.py
index d2364e1a0..f6f68ce0a 100644
--- a/cookbook/views/new.py
+++ b/cookbook/views/new.py
@@ -6,7 +6,7 @@ from django.urls import reverse_lazy
from django.utils.translation import gettext as _
from django.views.generic import CreateView
-from cookbook.forms import ImportRecipeForm, RecipeImport
+from cookbook.forms import ImportRecipeForm, RecipeImport, CategoryForm, KeywordForm
from cookbook.models import Category, Keyword, Recipe
@@ -25,7 +25,7 @@ class RecipeCreate(LoginRequiredMixin, CreateView): # this exists for completen
class CategoryCreate(LoginRequiredMixin, CreateView):
template_name = "generic\\new_template.html"
model = Category
- fields = ['name', 'icon', 'description']
+ form_class = CategoryForm
success_url = reverse_lazy('list_category')
def get_context_data(self, **kwargs):
@@ -37,7 +37,7 @@ class CategoryCreate(LoginRequiredMixin, CreateView):
class KeywordCreate(LoginRequiredMixin, CreateView):
template_name = "generic\\new_template.html"
model = Keyword
- fields = ['name', 'icon', 'description']
+ form_class = KeywordForm
success_url = reverse_lazy('list_keyword')
def get_context_data(self, **kwargs):