diff --git a/apps/gooyal_oauth2/filters.py b/apps/gooyal_oauth2/filters.py new file mode 100644 index 0000000..cdb6249 --- /dev/null +++ b/apps/gooyal_oauth2/filters.py @@ -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'], + } diff --git a/apps/gooyal_oauth2/forms.py b/apps/gooyal_oauth2/forms.py index 63ad581..60df072 100644 --- a/apps/gooyal_oauth2/forms.py +++ b/apps/gooyal_oauth2/forms.py @@ -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', diff --git a/apps/gooyal_oauth2/views/pages.py b/apps/gooyal_oauth2/views/pages.py index 161ff11..3d45911 100644 --- a/apps/gooyal_oauth2/views/pages.py +++ b/apps/gooyal_oauth2/views/pages.py @@ -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) diff --git a/templates/gooyal_oauth2/application_update.html b/templates/gooyal_oauth2/application_update.html new file mode 100644 index 0000000..fd48f71 --- /dev/null +++ b/templates/gooyal_oauth2/application_update.html @@ -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 %} +
+{% endblock %} \ No newline at end of file diff --git a/utils/views.py b/utils/views.py new file mode 100644 index 0000000..7f8d7f5 --- /dev/null +++ b/utils/views.py @@ -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 +