from django import forms
+from django.utils.translation import ugettext_lazy as _
from .models import Track
class Meta:
model = Track
fields = ['language', 'instru', 'sabam', 'cfwb', 'nonstop_zones']
+
+
+class TrackSearchForm(forms.Form):
+ q = forms.CharField(label=_('Text'))
+ zone = forms.ChoiceField(label=_('Nonstop Zone'), choices=get_optional_nonstop_zones)
+ order_by = forms.ChoiceField(label=_('Order'),
+ choices=[('alpha', _('Alphabetically'))])
{% endblock %}
{% block content %}
-<form><input name="q" type="search"><button>{% trans "Search" %}</button></form>
+<form id="track-search">
+ {{ form.as_p }}
+ <button>{% trans "Search" %}</button>
+</form>
<hr>
-{% if artists.exists %}
-<h3>{% trans "Artists" %}</h3>
-<ul>
- {% for artist in artists %}
- <li><a href="{% url 'artist-view' pk=artist.id %}">{{artist.name}}</a></li>
- {% endfor %}
-</ul>
-{% endif %}
-
{% if tracks.exists %}
-<h3>{% trans "Tracks" %}</h3>
<ul>
{% for track in tracks %}
<li><a href="{% url 'track-view' pk=track.id %}">{{track.title}}</a> — {{track.artist.name}}</li>
{% endfor %}
</ul>
-
{% endif %}
{% endblock %}
from django.core.files.storage import default_storage
from django.core.urlresolvers import reverse
from django.contrib import messages
+from django.db.models import Q
from django.http import HttpResponse, HttpResponseRedirect
from django.utils.translation import ugettext_lazy as _
from django.views.generic.base import RedirectView, TemplateView
from django.views.generic.edit import FormView
from django.views.generic.list import ListView
-from .forms import UploadTracksForm, TrackMetaForm
+from .forms import UploadTracksForm, TrackMetaForm, TrackSearchForm
from .models import SomaLogLine, Track, Artist, NonstopFile
from emissions.models import Nonstop
def get_context_data(self, **kwargs):
ctx = super(SearchView, self).get_context_data(**kwargs)
+ ctx['form'] = TrackSearchForm()
+ queryset = Track.objects.all()
+
q = self.request.GET.get('q')
if q:
- ctx['artists'] = Artist.objects.filter(name__icontains=q.lower())
- ctx['tracks'] = Track.objects.filter(title__icontains=q.lower()).order_by('title').select_related()
+ queryset = queryset.filter(Q(title__icontains=q.lower()) | Q(artist__name__icontains=q.lower()))
+
+ zone = self.request.GET.get('zone')
+ if zone:
+ from emissions.models import Nonstop
+ queryset = queryset.filter(nonstop_zones=zone)
+
+ if q or zone:
+ ctx['tracks'] = queryset.order_by('title').select_related()
+
return ctx