mirror of https://gitlab.crans.org/bde/nk20
[member] add user list and filter
This commit is contained in:
parent
55d984435d
commit
07d1cd225b
|
@ -0,0 +1,31 @@
|
|||
# -*- mode: python; coding: utf-8 -*-
|
||||
# Copyright (C) 2018-2019 by BDE ENS Paris-Saclay
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from django_filters import FilterSet, CharFilter,NumberFilter
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.models import CharField
|
||||
from crispy_forms.helper import FormHelper
|
||||
from crispy_forms.layout import Layout, Submit
|
||||
|
||||
from .models import Club
|
||||
|
||||
class UserFilter(FilterSet):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['last_name','first_name','username','profile__section']
|
||||
filter_overrides={
|
||||
CharField:{
|
||||
'filter_class':CharFilter,
|
||||
'extra': lambda f:{
|
||||
'lookup_expr':'icontains'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class UserFilterFormHelper(FormHelper):
|
||||
form_method = 'GET'
|
||||
layout = Layout(
|
||||
'last_name','first_name','username','profile__section',
|
||||
Submit('Submit','Apply Filter'),
|
||||
)
|
|
@ -2,12 +2,26 @@
|
|||
|
||||
import django_tables2 as tables
|
||||
from .models import Club
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
class ClubTable(tables.Table):
|
||||
class Meta:
|
||||
attrs = {'class':'table table-bordered table-condensed table-striped table-hover'}
|
||||
model = Club
|
||||
template_name = 'django_tables2/bootstrap.html'
|
||||
fields= ('id','name','email')
|
||||
fields = ('id','name','email')
|
||||
row_attrs = {'class':'table-row',
|
||||
'data-href': lambda record: record.pk }
|
||||
|
||||
|
||||
|
||||
class UserTable(tables.Table):
|
||||
section = tables.Column(accessor='profile.section')
|
||||
solde = tables.Column(accessor='note.balance')
|
||||
|
||||
class Meta:
|
||||
attrs = {'class':'table table-bordered table-condensed table-striped table-hover'}
|
||||
template_name = 'django_tables2/bootstrap.html'
|
||||
fields = ('last_name','first_name','username','email')
|
||||
model = User
|
||||
|
|
|
@ -15,5 +15,6 @@ urlpatterns = [
|
|||
path('club/<int:pk>/',views.ClubDetailView.as_view(),name="club_detail"),
|
||||
path('club/<int:pk>/add_member/',views.ClubAddMemberView.as_view(),name="club_add_member"),
|
||||
path('club/create/',views.ClubCreateView.as_view(),name="club_create"),
|
||||
path('user/',views.UserListView.as_view(),name="user_list"),
|
||||
path('user/<int:pk>',views.UserDetailView.as_view(),name="user_detail")
|
||||
]
|
||||
|
|
|
@ -8,6 +8,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
from django.views.generic import CreateView, ListView, DetailView
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.contrib.auth.forms import UserCreationForm
|
||||
from django.contrib.auth.models import User
|
||||
from django.urls import reverse_lazy
|
||||
from django.db.models import Q
|
||||
|
||||
|
@ -16,9 +17,13 @@ from django_tables2.views import SingleTableView
|
|||
|
||||
from .models import Profile, Club, Membership
|
||||
from .forms import ProfileForm, ClubForm,MembershipForm, MemberFormSet,FormSetHelper
|
||||
from .tables import ClubTable
|
||||
from .tables import ClubTable,UserTable
|
||||
from .filters import UserFilter, UserFilterFormHelper
|
||||
|
||||
|
||||
from note.models.transactions import Transaction
|
||||
from note.tables import HistoryTable
|
||||
|
||||
class UserCreateView(CreateView):
|
||||
"""
|
||||
Une vue pour inscrire un utilisateur et lui créer un profile
|
||||
|
@ -60,6 +65,28 @@ class UserDetailView(LoginRequiredMixin,DetailView):
|
|||
context['club_list'] = ClubTable(club_list)
|
||||
return context
|
||||
|
||||
class UserListView(LoginRequiredMixin,SingleTableView):
|
||||
model = User
|
||||
table_class = UserTable
|
||||
template_name = 'member/user_list.html'
|
||||
filter_class = UserFilter
|
||||
formhelper_class = UserFilterFormHelper
|
||||
|
||||
def get_queryset(self,**kwargs):
|
||||
qs = super().get_queryset()
|
||||
self.filter = self.filter_class(self.request.GET,queryset=qs)
|
||||
self.filter.form.helper = self.formhelper_class()
|
||||
return self.filter.qs
|
||||
|
||||
def get_context_data(self,**kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["filter"] = self.filter
|
||||
return context
|
||||
|
||||
|
||||
###################################
|
||||
############## CLUB ###############
|
||||
###################################
|
||||
|
||||
class ClubCreateView(LoginRequiredMixin,CreateView):
|
||||
"""
|
||||
|
|
|
@ -5,6 +5,7 @@ Django==2.2.3
|
|||
django-allauth==0.39.1
|
||||
django-crispy-forms==1.7.2
|
||||
django-extensions==2.1.9
|
||||
django-filter==2.2.0
|
||||
django-polymorphic==2.0.3
|
||||
django-reversion==3.0.3
|
||||
django-tables2==2.1.0
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
{% extends "base.html" %}
|
||||
{% load render_table from django_tables2 %}
|
||||
{% load crispy_forms_tags%}
|
||||
{% block content %}
|
||||
|
||||
<a class="btn btn-primary" href="{% url 'member:signup' %}">New User</a>
|
||||
|
||||
<div class="row">
|
||||
{% crispy filter.form filter.form.helper %}
|
||||
</div>
|
||||
<div class="row">
|
||||
<div id="replaceable-content" class="col-6">
|
||||
{% render_table table %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block extrajavascript %}
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function($) {
|
||||
$(".table-row").click(function() {
|
||||
window.document.location = $(this).data("href");
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
Loading…
Reference in New Issue