Added autocomplete fields for tags
This commit is contained in:
parent
e8e17aff16
commit
58c857bdd0
|
@ -39,6 +39,8 @@ INSTALLED_APPS = [
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'taggit',
|
'taggit',
|
||||||
'taggit_helpers',
|
'taggit_helpers',
|
||||||
|
'dal',
|
||||||
|
'dal_select2',
|
||||||
'stdimage',
|
'stdimage',
|
||||||
'users',
|
'users',
|
||||||
'roms'
|
'roms'
|
||||||
|
|
|
@ -1,9 +1,28 @@
|
||||||
|
from dal import autocomplete
|
||||||
|
|
||||||
from django.forms import ModelForm
|
from django.forms import ModelForm
|
||||||
|
from django.core.urlresolvers import reverse_lazy
|
||||||
|
|
||||||
from roms.models import Rom
|
from roms.models import Rom
|
||||||
|
|
||||||
|
|
||||||
class RomUploadForm(ModelForm)
|
|
||||||
|
class RomCreateForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Rom
|
model = Rom
|
||||||
fields = ['name', 'description', 'cover', 'low_binary', 'high_binary', 'tags']
|
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'))
|
||||||
|
}
|
||||||
|
|
|
@ -55,18 +55,8 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="field-body">
|
<div class="field-body">
|
||||||
<div class="field is-narrow">
|
<div class="field is-narrow">
|
||||||
<div class="control has-icons-left has-icons-right">
|
<div class="control">
|
||||||
<input class="input {% if form.tags.errors %}is-danger{% endif %}"
|
{{form.tags}}
|
||||||
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>
|
</div>
|
||||||
<p class="help is-danger">
|
<p class="help is-danger">
|
||||||
{{form.tags.errors.as_text}}
|
{{form.tags.errors.as_text}}
|
||||||
|
@ -219,4 +209,6 @@ $(document).ready(function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
{{ form.media }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -30,18 +30,8 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="field-body">
|
<div class="field-body">
|
||||||
<div class="field is-narrow">
|
<div class="field is-narrow">
|
||||||
<div class="control has-icons-left has-icons-right">
|
<div class="control">
|
||||||
<input class="input {% if form.tags.errors %}is-danger{% endif %}"
|
{{form.tags}}
|
||||||
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>
|
</div>
|
||||||
<p class="help is-danger">
|
<p class="help is-danger">
|
||||||
{{form.tags.errors.as_text}}
|
{{form.tags.errors.as_text}}
|
||||||
|
@ -167,7 +157,7 @@
|
||||||
|
|
||||||
<div class="field is-grouped">
|
<div class="field is-grouped">
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<button class="button is-primary">Hochladen</button>
|
<button class="button is-primary">Speichern</button>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -194,4 +184,6 @@ $(document).ready(function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
{{ form.media }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from django.conf.urls import include, url
|
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 = [
|
urlpatterns = [
|
||||||
url(r'^json/list/$', RomListJson.as_view()),
|
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'^details/(?P<id>[0-9]+)/$', RomDetailView.as_view(), name = 'romdetails'),
|
||||||
|
|
||||||
url(r'^new/$', RomCreateView.as_view(), name = 'romcreate'),
|
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'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -7,8 +7,10 @@ from django.contrib.auth import get_user_model
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
|
||||||
from taggit.models import Tag
|
from taggit.models import Tag
|
||||||
|
from dal import autocomplete
|
||||||
|
|
||||||
from roms.models import Rom
|
from roms.models import Rom
|
||||||
|
from roms.forms import RomCreateForm, RomUpdateForm
|
||||||
|
|
||||||
|
|
||||||
class RomList(ListView):
|
class RomList(ListView):
|
||||||
|
@ -47,7 +49,7 @@ class RomDetailView(DetailView):
|
||||||
|
|
||||||
class RomCreateView(LoginRequiredMixin, CreateView):
|
class RomCreateView(LoginRequiredMixin, CreateView):
|
||||||
model = Rom
|
model = Rom
|
||||||
fields = ['name', 'description', 'cover', 'low_binary', 'high_binary', 'tags']
|
form_class = RomCreateForm
|
||||||
template_name = 'roms/create.html'
|
template_name = 'roms/create.html'
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
|
@ -62,13 +64,25 @@ class RomCreateView(LoginRequiredMixin, CreateView):
|
||||||
class RomUpdateView(LoginRequiredMixin, UpdateView):
|
class RomUpdateView(LoginRequiredMixin, UpdateView):
|
||||||
model = Rom
|
model = Rom
|
||||||
pk_url_kwarg = 'id'
|
pk_url_kwarg = 'id'
|
||||||
fields = ['description', 'cover', 'low_binary', 'high_binary', 'tags']
|
form_class = RomUpdateForm
|
||||||
template_name = 'roms/update.html'
|
template_name = 'roms/update.html'
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return Rom.objects.filter(user__id = self.request.user.id)
|
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):
|
class RomListJson(ListView):
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -8,7 +8,7 @@
|
||||||
<link rel="stylesheet" type="text/css" href="{% static "css/gulasch_bulma.css" %}">
|
<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" %}">
|
<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>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
Loading…
Reference in New Issue