filter applications

This commit is contained in:
sahama 2024-08-03 18:32:34 +03:30
parent 99d73405fb
commit 8682656f58
5 changed files with 70 additions and 4 deletions

View file

@ -0,0 +1,20 @@
import django_filters
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from jalali_date.widgets import AdminJalaliDateWidget
from jalali_date.fields import JalaliDateField
from .models import Application
class JalaliDateFilter(django_filters.DateFilter):
field_class = JalaliDateField
class ApplicationFilter(django_filters.FilterSet):
class Meta:
model = Application
fields = {
'name': ['contains'],
'client_id': ['contains'],
}

View file

@ -53,7 +53,6 @@ class ApplicationForm(forms.ModelForm):
class ApplicationCreateForm(forms.ModelForm):
available_scopes_list = forms.CharField(widget=forms.Textarea(),required=False)
class Meta:
model = Application
fields = ['name',

View file

@ -4,8 +4,10 @@ from django.utils.decorators import method_decorator
from django.views.generic import CreateView, DetailView, ListView, UpdateView
from oauth2_provider.models import get_application_model
from apps.gooyal_oauth2.filters import ApplicationFilter
from apps.gooyal_oauth2.forms import ApplicationCreateForm, ApplicationUpdateForm
from apps.gooyal_oauth2.models import Application
from utils.views import FilterMixin
@method_decorator(login_required, name='dispatch')
@ -24,7 +26,7 @@ class ApplicationCreateView(CreateView):
@method_decorator(login_required, name='dispatch')
class ApplicationUpdateView(UpdateView):
template_name = "gooyal_oauth2/application_create.html"
template_name = "gooyal_oauth2/application_update.html"
form_class = ApplicationUpdateForm
def get_queryset(self):
@ -49,10 +51,12 @@ class ApplicationDetailView(DetailView):
@method_decorator(login_required, name='dispatch')
class ApplicationListView(ListView):
class ApplicationListView(FilterMixin, ListView):
model = Application
template_name = "gooyal_oauth2/application_list.html"
paginate_by = 20
filterset_class = ApplicationFilter
def get_queryset(self):
return Application.objects.filter(user=self.request.user)
qs = super().get_queryset()
return qs.filter(user=self.request.user)

View file

@ -0,0 +1,23 @@
{% extends "base.html" %}
{% load static %}
{% load crispy_forms_tags %}
{% load jalali_tags %}
{% block title %}Application: update{% endblock %}
{% block page_title %}Application: update{% endblock %}
{% block content %}
<form action="{{ request.get_full_path }}" method="post" enctype="multipart/form-data" novalidate>
{% csrf_token %}
<div class="col-md-12 col-lg-12" id="formset">
{{ form|crispy }}
</div>
<div class="col-12">
<div class="grid">
<div class="d-flex justify-content-end">
<input class="btn btn-success ms-2" type="submit" value="ثبت" name="save"/>
</div>
</div>
</div>
</form>
{% endblock %}

20
utils/views.py Normal file
View file

@ -0,0 +1,20 @@
import django_filters
class FilterMixin(object):
filterset_class:django_filters.FilterSet
def get_filterset_class(self):
return self.filterset_class
def get_context_data(self, *, object_list=None, **kwargs):
context_data = super().get_context_data(**kwargs)
filter = self.get_filterset_class()(self.request.GET, queryset=self.get_queryset())
context_data['filter'] = filter
return context_data
def get_queryset(self):
qs = super().get_queryset()
qs = self.get_filterset_class()(self.request.GET, queryset=qs).qs
return qs