Added autocomplete fields for tags
This commit is contained in:
parent
e8e17aff16
commit
58c857bdd0
|
@ -39,6 +39,8 @@ INSTALLED_APPS = [
|
|||
'django.contrib.staticfiles',
|
||||
'taggit',
|
||||
'taggit_helpers',
|
||||
'dal',
|
||||
'dal_select2',
|
||||
'stdimage',
|
||||
'users',
|
||||
'roms'
|
||||
|
|
|
@ -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'))
|
||||
}
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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'),
|
||||
]
|
||||
|
|
|
@ -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
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue