Added autocomplete fields for tags

This commit is contained in:
Sebastian 2017-05-16 16:13:35 +02:00
parent e8e17aff16
commit 58c857bdd0
8 changed files with 52 additions and 35 deletions

View File

@ -39,6 +39,8 @@ INSTALLED_APPS = [
'django.contrib.staticfiles',
'taggit',
'taggit_helpers',
'dal',
'dal_select2',
'stdimage',
'users',
'roms'

View File

@ -1,9 +1,28 @@
from dal import autocomplete
from django.forms import ModelForm
from django.core.urlresolvers import reverse_lazy
from roms.models import Rom
class RomUploadForm(ModelForm)
class RomCreateForm(ModelForm):
class Meta:
model = Rom
fields = ['name', 'description', 'cover', 'low_binary', 'high_binary', 'tags']
widgets = {
'tags': autocomplete.TaggitSelect2(reverse_lazy('tag-autocomplete'))
}
class RomUpdateForm(ModelForm):
class Meta:
model = Rom
fields = ['description', 'cover', 'low_binary', 'high_binary', 'tags']
widgets = {
'tags': autocomplete.TaggitSelect2(reverse_lazy('tag-autocomplete'))
}

View File

@ -55,18 +55,8 @@
</div>
<div class="field-body">
<div class="field is-narrow">
<div class="control has-icons-left has-icons-right">
<input class="input {% if form.tags.errors %}is-danger{% endif %}"
type="text" name="{{form.tags.html_name}}"
id="{{form.tags.id_for_label}}" value="{{form.tags.value|default_if_none:''}}" />
<span class="icon is-small is-left">
<i class="fa fa-tags"></i>
</span>
<span class="icon is-small is-right">
{% if form.tags.errors %}
<i class="fa fa-warning"></i>
{% endif %}
</span>
<div class="control">
{{form.tags}}
</div>
<p class="help is-danger">
{{form.tags.errors.as_text}}
@ -219,4 +209,6 @@ $(document).ready(function() {
});
});
</script>
{{ form.media }}
{% endblock %}

View File

@ -30,18 +30,8 @@
</div>
<div class="field-body">
<div class="field is-narrow">
<div class="control has-icons-left has-icons-right">
<input class="input {% if form.tags.errors %}is-danger{% endif %}"
type="text" name="{{form.tags.html_name}}"
id="{{form.tags.id_for_label}}" value="{{form.tags.value|default_if_none:''}}" />
<span class="icon is-small is-left">
<i class="fa fa-tags"></i>
</span>
<span class="icon is-small is-right">
{% if form.tags.errors %}
<i class="fa fa-warning"></i>
{% endif %}
</span>
<div class="control">
{{form.tags}}
</div>
<p class="help is-danger">
{{form.tags.errors.as_text}}
@ -167,7 +157,7 @@
<div class="field is-grouped">
<p class="control">
<button class="button is-primary">Hochladen</button>
<button class="button is-primary">Speichern</button>
</p>
</div>
</form>
@ -194,4 +184,6 @@ $(document).ready(function() {
});
});
</script>
{{ form.media }}
{% endblock %}

View File

@ -1,6 +1,6 @@
from django.conf.urls import include, url
from roms.views import RomListJson, RomDetailViewJson, RomList, RomDetailView, RomCreateView, RomUpdateView
from roms.views import RomListJson, RomDetailViewJson, RomList, RomDetailView, RomCreateView, RomUpdateView, TagAutocomplete
urlpatterns = [
url(r'^json/list/$', RomListJson.as_view()),
@ -12,5 +12,7 @@ urlpatterns = [
url(r'^details/(?P<id>[0-9]+)/$', RomDetailView.as_view(), name = 'romdetails'),
url(r'^new/$', RomCreateView.as_view(), name = 'romcreate'),
url(r'^edit/(?P<id>[0-9]+)/$', RomUpdateView.as_view(), name = 'romupdate')
url(r'^edit/(?P<id>[0-9]+)/$', RomUpdateView.as_view(), name = 'romupdate'),
url(r'^tag-autocomplete/$', TagAutocomplete.as_view(), name='tag-autocomplete'),
]

View File

@ -7,8 +7,10 @@ from django.contrib.auth import get_user_model
from django.db.models import Q
from taggit.models import Tag
from dal import autocomplete
from roms.models import Rom
from roms.forms import RomCreateForm, RomUpdateForm
class RomList(ListView):
@ -47,7 +49,7 @@ class RomDetailView(DetailView):
class RomCreateView(LoginRequiredMixin, CreateView):
model = Rom
fields = ['name', 'description', 'cover', 'low_binary', 'high_binary', 'tags']
form_class = RomCreateForm
template_name = 'roms/create.html'
def form_valid(self, form):
@ -62,13 +64,25 @@ class RomCreateView(LoginRequiredMixin, CreateView):
class RomUpdateView(LoginRequiredMixin, UpdateView):
model = Rom
pk_url_kwarg = 'id'
fields = ['description', 'cover', 'low_binary', 'high_binary', 'tags']
form_class = RomUpdateForm
template_name = 'roms/update.html'
def get_queryset(self):
return Rom.objects.filter(user__id = self.request.user.id)
class TagAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
if not self.request.user.is_authenticated():
return Tag.objects.none()
qs = Tag.objects.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs
class RomListJson(ListView):

File diff suppressed because one or more lines are too long

View File

@ -8,7 +8,7 @@
<link rel="stylesheet" type="text/css" href="{% static "css/gulasch_bulma.css" %}">
<link rel="stylesheet" type="text/css" href="{% static "fontawsome/css/font-awesome.min.css" %}">
<script src="{% static "js/jquery-3.2.1.slim.min.js" %}"></script>
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script>
</head>
<body>