Compare commits

..

No commits in common. "fa6ac5334efc42012dc14014d316e8eaee12c43e" and "d8cc90188e4a6662e5a0bbe3493c57397f4e0da6" have entirely different histories.

3 changed files with 58 additions and 71 deletions

View file

@ -1,5 +1,4 @@
from django import forms from django import forms
from django.db.models import Q
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from servala.core.models import ( from servala.core.models import (
@ -19,17 +18,13 @@ class ServiceFilterForm(forms.Form):
cloud_provider = forms.ModelChoiceField( cloud_provider = forms.ModelChoiceField(
queryset=CloudProvider.objects.all(), required=False queryset=CloudProvider.objects.all(), required=False
) )
q = forms.CharField(label=_("Search"), required=False) q = forms.CharField(required=False)
def filter_queryset(self, queryset): def filter_queryset(self, queryset):
if category := self.cleaned_data.get("category"): if category := self.cleaned_data.get("category"):
queryset = queryset.filter(category=category) queryset = queryset.filter(category=category)
if cloud_provider := self.cleaned_data.get("cloud_provider"): if cloud_provider := self.cleaned_data.get("cloud_provider"):
queryset = queryset.filter(offerings__provider=cloud_provider) queryset = queryset.filter(offerings__provider=cloud_provider)
if search := self.cleaned_data.get("q"):
queryset = queryset.filter(
Q(name__icontains=search) | Q(category__name__icontains=search)
)
return queryset return queryset

View file

@ -28,42 +28,38 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row"> {% for offering in service.offerings.all %}
{% for offering in service.offerings.all %} <div class="card col-6 col-lg-3 col-md-4">
<div class="col-6 col-lg-3 col-md-4"> <div class="card-header d-flex align-items-center">
<div class="card"> {% if offering.provider.logo %}
<div class="card-header d-flex align-items-center"> <img src="{{ offering.provider.logo.url }}"
{% if offering.provider.logo %} alt="{{ offering.provider.name }}"
<img src="{{ offering.provider.logo.url }}" class="me-3"
alt="{{ offering.provider.name }}" style="max-width: 48px;
class="me-3" max-height: 48px">
style="max-width: 48px; {% endif %}
max-height: 48px"> <div class="d-flex flex-column">
{% endif %} <h4 class="mb-0">{{ offering.provider.name }}</h4>
<div class="d-flex flex-column">
<h4 class="mb-0">{{ offering.provider.name }}</h4>
</div>
</div>
<div class="card-body">
{% if offering.description %}
<p class="card-text">{{ offering.description }}</p>
{% elif offering.provider.description %}
<p class="card-text">{{ offering.provider.description }}</p>
{% endif %}
</div>
<div class="card-footer d-flex justify-content-between">
<span></span>
<a href="offering/{{ offering.pk }}/" class="btn btn-light-primary">{% translate "Read More" %}</a>
</div>
</div> </div>
</div> </div>
{% empty %} <div class="card-body">
<div class="card"> {% if offering.description %}
<div class="card-body"> <p class="card-text">{{ offering.description }}</p>
<p>{% translate "No offerings found." %}</p> {% elif offering.provider.description %}
</div> <p class="card-text">{{ offering.provider.description }}</p>
{% endif %}
</div> </div>
{% endfor %} <div class="card-footer d-flex justify-content-between">
</div> <span></span>
<a href="offering/{{ offering.pk }}/" class="btn btn-light-primary">{% translate "Read More" %}</a>
</div>
</div>
{% empty %}
<div class="card">
<div class="card-body">
<p>{% translate "No offerings found." %}</p>
</div>
</div>
{% endfor %}
</section> </section>
{% endblock content %} {% endblock content %}

View file

@ -16,40 +16,36 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row"> {% for service in services %}
{% for service in services %} <div class="card col-6 col-lg-3 col-md-4">
<div class="col-6 col-lg-3 col-md-4"> <div class="card-header d-flex align-items-center">
<div class="card"> {% if service.logo %}
<div class="card-header d-flex align-items-center"> <img src="{{ service.logo.url }}"
{% if service.logo %} alt="{{ service.name }}"
<img src="{{ service.logo.url }}" class="me-3"
alt="{{ service.name }}" style="max-width: 48px;
class="me-3" max-height: 48px">
style="max-width: 48px; {% endif %}
max-height: 48px"> <div class="d-flex flex-column">
{% endif %} <h4 class="mb-0">{{ service.name }}</h4>
<div class="d-flex flex-column"> <small class="text-muted">{{ service.category }}</small>
<h4 class="mb-0">{{ service.name }}</h4>
<small class="text-muted">{{ service.category }}</small>
</div>
</div>
<div class="card-body">
{% if service.description %}<p class="card-text">{{ service.description }}</p>{% endif %}
</div>
<div class="card-footer d-flex justify-content-between">
<span></span>
<a href="{{ service.slug }}/" class="btn btn-light-primary">{% translate "Read More" %}</a>
</div>
</div> </div>
</div> </div>
{% empty %} <div class="card-body">
<div class="card"> {% if service.description %}<p class="card-text">{{ service.description }}</p>{% endif %}
<div class="card-body">
<p>{% translate "No services found." %}</p>
</div>
</div> </div>
{% endfor %} <div class="card-footer d-flex justify-content-between">
</div> <span></span>
<a href="{{ service.slug }}/" class="btn btn-light-primary">{% translate "Read More" %}</a>
</div>
</div>
{% empty %}
<div class="card">
<div class="card-body">
<p>{% translate "No services found." %}</p>
</div>
</div>
{% endfor %}
</section> </section>
<script src="{% static "js/autosubmit.js" %}" defer></script> <script src="{% static "js/autosubmit.js" %}" defer></script>
{% endblock content %} {% endblock content %}