Juan Carlos 5 vuotta sitten
vanhempi
commit
c0b6ed4644
4 muutettua tiedostoa jossa 125 lisäystä ja 46 poistoa
  1. 25 0
      marktplatz/forms.py
  2. 32 17
      marktplatz/templates/marktplatz/product_overview.html
  3. 1 0
      marktplatz/urls.py
  4. 67 29
      marktplatz/views.py

+ 25 - 0
marktplatz/forms.py

@@ -27,6 +27,31 @@ def extend_help_text( help_text, myList ):
         return extended_text
 
 
+class textSearchForm(forms.Form):
+
+    mywidget = forms.TextInput(  attrs={'onfocus': "this.value=''", }  )
+    searchText = forms.CharField ( label='', widget = mywidget, max_length = 2048, min_length=3, empty_value="Suche...", initial='Suche...' )
+
+    def __init__(self, *args, **kwargs):
+        super(textSearchForm, self).__init__(*args, **kwargs)
+        self.helper = FormHelper()
+        # self.helper.form_tag = False
+        self.helper.layout = Layout(
+
+           Div(
+               Div('searchText',  css_class='col-sm-6 col-6'),
+               Div(
+                   ButtonHolder(
+                       Submit('submit', 'Submit', css_class='btn border-dark rounded-0 mybtn')
+                   ),
+               css_class='col-sm-6 col-6'),
+               css_class='form-row  row'),
+
+               # Submit('submit', 'Submit', css_class='btn border-dark rounded-0 mybtn'),
+
+           )
+
+
 class searchAgentForm(forms.ModelForm):
 
     class Meta:

+ 32 - 17
marktplatz/templates/marktplatz/product_overview.html

@@ -2,6 +2,7 @@
 {% load tags %}
 {% load countries %}
 {% load static %}
+{% load crispy_forms_tags %}
 
 {% block script %}
 <script>
@@ -193,17 +194,6 @@ $(document).ready(function(){
 <nav class="navbar-expand-sm tag" style="margin-left: 0px">
 
 
-  <div class="row border-dark " id="search_bar">
-    <div class="container-fluid">
-  <input type="search" id="site-search" name="q" aria-label="Suche">
-
-    {% include "marktplatz/modal-sa.html" %}
-  </div>
-</div>
-<div class="">
-  &nbsp;
-</div>
-
   <button class="navbar-toggler border-thin mybtn rounded-0 tag navbar-expand-sm " type="button" data-toggle="collapse" data-target="#tags" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle tags" style="font-size: 15px">
     <span class="mybtn"></span> Show All Tags ⋁
   </button>
@@ -212,18 +202,13 @@ $(document).ready(function(){
 
   <div class="row border-dark collapse navbar-collapse" id="tags">
 
-
     <div class="container-fluid">
       <button id='show' class="border-thin mybtn " style="margin-right: 2px;margin-bottom: 2px">#Show All</button>
 
-
-
       {% for elem in frei_list %}
       <button id='{{elem.0}}' toggler='{{elem.0}}' class="border-thin mybtn btn-toggle elem.0" style="margin-right: 2px;margin-bottom: 2px">#{{elem.1}}</button>
       {% endfor %}
 
-
-
       {% for key, value in ort_dict.items %}
       <button class="border-thin mybtn btn-toggle {{key}}" toggler='{{key}}' style="margin-right: 2px;margin-bottom: 2px">#{{value}}</button>
       {% endfor %}
@@ -232,11 +217,41 @@ $(document).ready(function(){
       <button class="border-thin mybtn btn-toggle {{elem.0}}" toggler='{{elem.0}}' style="margin-right: 2px;margin-bottom: 2px">#{{elem.1}}</button>
       {% endfor %}
 
+    </div>
+  </div>
 
 
+    <div class="">
+      &nbsp;
     </div>
-  </div>
 
+  <div class="row border-dark " id="search_bar">
+    <div class="container-fluid">
+      <div class="row">
+        <div class="col-sm-6">
+          <form method="post" action="{% url 'search-products' %}" >
+            {% csrf_token %}
+            <!-- Left here in case we need to debug -->
+            {% if signup_errors %}
+            <div class='invalid-feedback' style="display: none;">{{ signup_errors }}</div>
+            {% endif %}
+            {% if contact_errors %}
+            <div class='invalid-feedback' style="display: none;">{{ contact_errors }}</div>
+            {% endif %}
+
+            <!-- end of debug -->
+
+            {%  crispy textSearchForm  %}
+
+          </form>
+
+        </div>
+        <div class="col-sm-6">
+          {% include "marktplatz/modal-sa.html" %}
+        </div>
+      </div>
+    </div>
+  </div>
 
 </nav>
 

+ 1 - 0
marktplatz/urls.py

@@ -11,6 +11,7 @@ urlpatterns = [
     path('about/', views.about, name='about'),
     path('submit/', views.submit, name='submit'),
     path('products/', views.ProductsView.as_view(), name='products'),
+    path('products/search', views.SearchProductsView.as_view(), name='search-products'),
     path('suchagent/', views.SearchAgentCreate.as_view(), name='search-agent-create'),
     path('suchagent/embed', views.SearchAgentCreate.as_view( embed=True, ), name='search-agent-create-embed'),
     path('suchagent/<int:pk>/<slug:hash>/', views.SearchAgentDelete.as_view(), name='search-agent-delete'),

+ 67 - 29
marktplatz/views.py

@@ -1,48 +1,45 @@
-from django.shortcuts import render
-from django.views import generic
-from django.views.generic import TemplateView
-from django.views.generic.edit import *
-from marktplatz.models import *
+import csv
+import json
+import copy
+import itertools
+from PIL import Image
+from PIL import Image
+from PIL import ImageFont
+from PIL import ImageDraw
+
 from django.db import models
-from django.contrib.auth.models import User
-from django.contrib.auth.mixins import LoginRequiredMixin
+from django.db.models import Count
 from django.core import serializers
+from django.core.files import File
 from django.core.mail import send_mail
+from django.urls import reverse, reverse_lazy
+from django.http import HttpResponseRedirect, Http404, HttpResponse
+from django.contrib import messages
+from django.contrib.auth import login, authenticate
+from django.contrib.auth.models import User
+from django.contrib.auth.mixins import LoginRequiredMixin
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.models import User, Group
-from django.http import HttpResponseRedirect
-from django.urls import reverse, reverse_lazy
-from django.core.files import File
-from django.http import HttpResponse
+from django.views import generic
+from django.views.generic import TemplateView
 from django.views.generic import FormView
-from django.shortcuts import get_object_or_404
-from django.contrib.auth import login, authenticate
-from django.shortcuts import render, redirect
+from django.views.generic.edit import *
+from django.shortcuts import render, get_object_or_404, redirect, get_list_or_404, get_object_or_404
 from django.forms import formset_factory
 from django.forms import BaseModelFormSet
 from django.forms import modelformset_factory, inlineformset_factory
 from django.forms.models import model_to_dict
-from django.contrib import messages
 from django_file_form.uploader import FileFormUploader
 from django_countries import countries
 from django.template import Context, Template
 from django.conf import settings
+
 from constance import config
-from django.http import Http404
-from django.db.models import Count
-from PIL import Image
-from PIL import ImageFont
-from PIL import ImageDraw
 from django.db.models import Q
-from django.shortcuts import get_list_or_404, get_object_or_404
 # from .forms import LinkFormSet, LinkForm, FormsetHelper, MediaFormsetHelper, MediaFormSet
+from marktplatz.models import *
 from .forms import *
-import itertools
-from PIL import Image
-import json
-import copy
 
-import csv
 # Create your views here.
 def index(request):
     context = {}
@@ -98,7 +95,7 @@ class SearchAgentCreate(CreateView):
             if self.embed :
                 kwargs['embed']       = True
                 kwargs['form_content']       = '<i  class="fas fa-bell"></i> Suchagent einrichten'
-                kwargs['content_a']       = 'Sehr gut, Dein Suchagent wurde erstellt!'
+                kwargs['content_a']       = 'Dein Suchagent wurde erstellt!'
             return super().get_context_data(**kwargs)
 
 
@@ -176,8 +173,6 @@ class ProductsView(generic.ListView):
                     orts[product.ort] = product.get_ort_display()
 
 
-
-
             years.remove('')
             context['year_list'] = years
             context['count_list'] = used_countries
@@ -191,12 +186,55 @@ class ProductsView(generic.ListView):
             context['sponsor_cards'] =  Template( config.SPONSOR_CARDS ).render( Context(context) )
             context['main_card'] =      Template( config.MAIN_CARD ).render( Context(context) )
 
+
+            context['textSearchForm'] = textSearchForm()
+
+
             return context
 
 
 
     template_name = 'marktplatz/product_overview.html'
 
+class SearchProductsView(ProductsView):
+
+    def get_queryset(self, qfilter, **kwargs ):
+        # original qs
+        qs = super().get_queryset()
+
+        self.user = self.request.user
+        user = self.user
+
+        qs =  qs.filter (name__icontains= qfilter) | qs.filter (claim__icontains= qfilter) | qs.filter (beschreibung__icontains= qfilter) | qs.filter (learning__icontains= qfilter) | qs.filter (status__icontains= qfilter) | qs.filter (adresse__icontains= qfilter) | qs.filter (plz__icontains= qfilter) | qs.filter (adresse__icontains= qfilter) | qs.filter (ort__icontains= qfilter) | qs.filter (website__icontains= qfilter) | qs.filter (email__icontains= qfilter) | qs.filter (kfrei__icontains= qfilter) | qs.filter (rechtsform__icontains= qfilter) | qs.filter (orga__icontains= qfilter)
+
+        qs = qs.order_by('frei')
+
+        return qs.filter(public = True)
+
+    def post(self, request, *args, **kwargs):
+
+        qform = textSearchForm( request.POST )
+        if qform.is_valid():
+            self.object_list = self.get_queryset(qfilter= qform.cleaned_data["searchText"]  )
+
+        allow_empty = self.get_allow_empty()
+
+        if not allow_empty:
+            # When pagination is enabled and object_list is a queryset,
+            # it's better to do a cheap query than to load the unpaginated
+            # queryset in memory.
+            if self.get_paginate_by(self.object_list) is not None and hasattr(self.object_list, 'exists'):
+                is_empty = not self.object_list.exists()
+            else:
+                is_empty = not self.object_list
+            if is_empty:
+                raise Http404(_("Empty list and '%(class_name)s.allow_empty' is False.") % {
+                    'class_name': self.__class__.__name__,
+                })
+        context = self.get_context_data()
+        return self.render_to_response(context)
+
+
 class DetailView(generic.DetailView):
     model = Product
     template_name = 'marktplatz/product_detail.html'