did semi full refuctor
This commit is contained in:
@@ -1,18 +1,16 @@
|
||||
<h1> Jäsenlista </h1>
|
||||
<h1> Jäsenlista </h1>
|
||||
|
||||
<script src="../js/post_member.js"></script>
|
||||
<script src="../js/remove_member.js"></script>
|
||||
|
||||
<div ng-app="getMemberApp" ng-controller="getController">
|
||||
|
||||
<div >
|
||||
|
||||
<table id="choose-address-table" class="ui-widget ui-widget-content">
|
||||
<thead>
|
||||
<tr ng-repeat="ui-widget-header">
|
||||
<th>ID</th>
|
||||
<th>Etunimi</th>
|
||||
<th>Sukunimi</th>
|
||||
<th>Sähköposti</th>
|
||||
<th>AYY-jäsen</th>
|
||||
<th>Sähköposti</th>
|
||||
<th>AYY-jäsen</th>
|
||||
<th>JAS-listalla</th>
|
||||
<th>Asuinpaikka</th>
|
||||
</tr>
|
||||
@@ -32,5 +30,5 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,37 +1,31 @@
|
||||
<h1> Lisää jäsen </h1>
|
||||
|
||||
<script src="../js/post_member.js"></script>
|
||||
|
||||
<div ng-app="postApp" ng-controller="postController">
|
||||
<h1> Lis�� j�sen </h1>
|
||||
|
||||
<div id="input_form">
|
||||
<form name="memberForm" ng-submit="submitForm()">
|
||||
<div class="form-group">
|
||||
<label>Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="Sähkö" class="form-control" ng-model="firstName"></input>
|
||||
<label>Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="S�hk�" class="form-control" ng-model="firstName"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insinööri" class="form-control" ng-model="lastName"></input>
|
||||
<label>Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insin��ri" class="form-control" ng-model="lastName"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sähköposti: </label>
|
||||
<label>S�hk�posti: </label>
|
||||
<input id="emailField" required type="text" placeholder="sahko.insinoori@aalto.fi" class="form-control" ng-model="email"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>AYY jäsen: </label>
|
||||
<label>AYY j�sen: </label>
|
||||
<input type="checkbox" id="AYY" value="0" ng-model="AYY"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>JAS-listaan: </label>
|
||||
<label>JAS-listaan: </label>
|
||||
<input type="checkbox" id="JAS" value="0" ng-model="JAS"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Asuinkunta: </label>
|
||||
<label>Asuinkunta: </label>
|
||||
<input id="PORField" required type="text" placeholder="Otaniemi" class="form-control" ng-model="POR"></input>
|
||||
</div>
|
||||
<button ng-click="send()" type="submit" id="sendmember">Tallenna</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
var appData = {
|
||||
"views": {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
$(function() {
|
||||
|
||||
// if(Modernizr.history){
|
||||
|
||||
var $mainContent = $("#main-content"),
|
||||
$pageWrap = $("#page-content-wrapper"),
|
||||
baseHeight = 0,
|
||||
$el;
|
||||
|
||||
$pageWrap.height($pageWrap.height());
|
||||
baseHeight = $pageWrap.height() - $mainContent.height();
|
||||
|
||||
$("nav").delegate("a", "click", function() {
|
||||
_link = $(this).attr("href");
|
||||
//history.pushState(null, null, _link);
|
||||
loadContent(_link);
|
||||
return false;
|
||||
});
|
||||
|
||||
function loadContent(href){
|
||||
$mainContent
|
||||
.find("#main-content")
|
||||
.fadeOut(200, function() {
|
||||
$mainContent.hide().load(href + " #main-content", function() {
|
||||
$mainContent.fadeIn(200, function() {
|
||||
$pageWrap.animate({
|
||||
height: baseHeight + $mainContent.height() + "px"
|
||||
});
|
||||
});
|
||||
console.log(href);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$(window).bind('popstate', function(){
|
||||
_link = location.pathname.replace(/^.*[\\\/]/, ''); //get filename only
|
||||
loadContent(_link);
|
||||
});
|
||||
|
||||
//} // otherwise, history is not supported, so nothing fancy here.
|
||||
|
||||
|
||||
});
|
||||
@@ -1,59 +0,0 @@
|
||||
//Here are the links to put inside index
|
||||
//https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js
|
||||
//https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.map
|
||||
|
||||
//https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.min.js
|
||||
//https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.min.js.map
|
||||
|
||||
/*Lataa koko data js:ään controlleri, jolla oma scope, jossa muuttujia
|
||||
https://docs.angularjs.org/api/ng/directive/ngRepeat check this
|
||||
|
||||
*/
|
||||
/*
|
||||
Hae koko datapaketti serveriltä. Näytä lista kokonaan.
|
||||
Typeeminen hakukenttään -> datapaketin filteröintiä
|
||||
interaktiivinen, reaaliaikainen setti
|
||||
*/
|
||||
|
||||
var app = angular.module("getMemberApp", []);
|
||||
|
||||
app.controller("getController", function($scope, $http){
|
||||
$http.get("/members/api/members").then(function(response){
|
||||
$scope.members = response.data.records;
|
||||
});
|
||||
$scope.removeMember = function(id){
|
||||
var index = -1;
|
||||
var comArr = eval( $scope.members );
|
||||
for( var i = 0; i < comArr.length; i++ ) {
|
||||
if( comArr[i].id === id ) {
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( index === -1 ) {
|
||||
alert( "Something gone wrong" );
|
||||
}
|
||||
$scope.members.splice( index, 1 );
|
||||
};
|
||||
});
|
||||
|
||||
/*$.get("/members/api/members", function(data){
|
||||
alert(data);
|
||||
});
|
||||
|
||||
function getAll() {
|
||||
return $http.get('/members/api/members');
|
||||
}
|
||||
|
||||
function createUser(user) {
|
||||
return $http.post('members/api/members', user);
|
||||
}
|
||||
|
||||
function updateUser(user) {
|
||||
return $http.put('/members/api/members', user.id, user);
|
||||
}
|
||||
|
||||
function deleteUser(user) {
|
||||
return $http.delete('/members/api/members', user);
|
||||
}
|
||||
*/
|
||||
@@ -0,0 +1,18 @@
|
||||
|
||||
app.controller("getController", function($scope, $http){
|
||||
$http.get("/members/api/members").then(function(response){
|
||||
$scope.members = response.data;
|
||||
});
|
||||
});
|
||||
|
||||
app.controller("postController", function($scope, $http) {
|
||||
$scope.firstName = "";
|
||||
$scope.lastName = "";
|
||||
$scope.email = "";
|
||||
$scope.AYY = "";
|
||||
$scope.JAS = "";
|
||||
$scope.POR = "";
|
||||
$scope.send = function() {
|
||||
$http.post("/members/api/member", {"first_name":$scope.firstName, "last_name":$scope.lastName, "email":$scope.email, "AYY":$scope.AYY, "jas":$scope.JAS, "POR":$scope.POR});
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,20 @@
|
||||
var app = angular.module('memberApp', ['ngRoute']);
|
||||
|
||||
app.config(['$routeProvider', function($routeProvider){
|
||||
$routeProvider
|
||||
.when('/',{
|
||||
templateUrl:"/static/html/jasenlista.html",
|
||||
controller:'getController',
|
||||
})
|
||||
.when('/list',{
|
||||
templateUrl:"/static/html/jasenlista.html",
|
||||
controller:'getController',
|
||||
})
|
||||
.when('/add',{
|
||||
templateUrl:"/static/html/lisaa_jasen.html",
|
||||
controller:'postController',
|
||||
})
|
||||
.otherwise({
|
||||
'redirectTo':"/"
|
||||
})
|
||||
}]);
|
||||
File diff suppressed because one or more lines are too long
@@ -1,49 +0,0 @@
|
||||
/*var firstNameField = document.getElementById('firstNameField').value;
|
||||
var lastNameField = document.getElementById('lastNameField').value;
|
||||
var emailField = document.getElementById('emailField').value;
|
||||
var ayy = document.getElementById('AYY').value;
|
||||
var jas = document.getElementById('JAS').value;
|
||||
var porField = document.getElementById('PORField').value;
|
||||
*/
|
||||
|
||||
function postMember(data){
|
||||
//post json dada to server
|
||||
//url /members/api/member
|
||||
$http.post("/members/api/member", JSON.stringify(data));
|
||||
}
|
||||
|
||||
var app = angular.module("sendMember", []);
|
||||
|
||||
app.controller("postController", function($scope) {
|
||||
$scope.firstName = "";
|
||||
$scope.lastName = "";
|
||||
$scope.email = "";
|
||||
$scope.AYY = "";
|
||||
$scope.JAS = "";
|
||||
$scope.POR = "";
|
||||
$scope.send = function() {
|
||||
postMember({"first_name":$scope.firstName, "last_name":$scope.lastName, "email":$scope.email, "AYY":$scope.AYY, "jas":$scope.JAS, "POR":$scope.POR});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
/*
|
||||
var subButton = document.getElementById('sendmember');
|
||||
|
||||
$(subButton).click(function(){
|
||||
console.log("Jee");
|
||||
$.post("/members/api/member",
|
||||
{
|
||||
first_name: document.getElementById('firstNameField').value,
|
||||
last_name: document.getElementById('lastNameField').value,
|
||||
email: document.getElementById('emailField').value,
|
||||
AYY: document.getElementById('AYY').value,
|
||||
jas: document.getElementById('JAS').value,
|
||||
POR: document.getElementById('PORField').value
|
||||
},
|
||||
function(data, status){
|
||||
alert("Data: " + data + "\nStatus: " + status);
|
||||
});
|
||||
});
|
||||
*/
|
||||
@@ -1,18 +0,0 @@
|
||||
var app = angular.module("removeMember", []);
|
||||
|
||||
app.controller("getController", function($scope) {
|
||||
$scope.removeMember = function(id){
|
||||
var index = -1;
|
||||
var comArr = eval( $scope.members );
|
||||
for( var i = 0; i < comArr.length; i++ ) {
|
||||
if( comArr[i].id === id ) {
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( index === -1 ) {
|
||||
alert( "Something gone wrong" );
|
||||
}
|
||||
$scope.members.splice( index, 1 );
|
||||
};
|
||||
)};
|
||||
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
var CommentBox = React.createClass
|
||||
({
|
||||
loadCommentsFromServer: function() {
|
||||
$.ajax({
|
||||
url: this.props.url,
|
||||
dataType: 'json',
|
||||
cache: false,
|
||||
success: function(data) {
|
||||
this.setState({data: data});
|
||||
}.bind(this),
|
||||
error: function(xhr, status, err) {
|
||||
console.error(this.props.url, status, err.toString());
|
||||
}.bind(this)
|
||||
});
|
||||
},
|
||||
handleCommentSubmit: function(comment)
|
||||
{
|
||||
var comments = this.state.data;
|
||||
// Optimistically set an id on the new comment. It will be replaced by an
|
||||
// id generated by the server. In a production application you would likely
|
||||
// not use Date.now() for this and would have a more robust system in place.
|
||||
comment.id = Date.now();
|
||||
var newComments = comments.concat([comment]);
|
||||
this.setState({data: newComments});
|
||||
$.ajax
|
||||
({
|
||||
url: this.props.url,
|
||||
dataType: 'json',
|
||||
type: 'POST',
|
||||
data: comment,
|
||||
success: function(data) {
|
||||
this.setState({data: data});
|
||||
}.bind(this),
|
||||
error: function(xhr, status, err) {
|
||||
this.setState({data: comments});
|
||||
console.error(this.props.url, status, err.toString());
|
||||
}.bind(this)
|
||||
});
|
||||
},
|
||||
getInitialState: function()
|
||||
{
|
||||
return {data: []};
|
||||
},
|
||||
componentDidMount: function()
|
||||
{
|
||||
this.loadCommentsFromServer();
|
||||
setInterval(this.loadCommentsFromServer, this.props.pollInterval);
|
||||
},
|
||||
render: function()
|
||||
{
|
||||
return (
|
||||
<div className="commentBox">
|
||||
<h1>Comments</h1>
|
||||
<CommentList data={this.state.data} />
|
||||
<CommentForm onCommentSubmit={this.handleCommentSubmit} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
*/
|
||||
@@ -1,172 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" ng-app="memberlistApp">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="uli uli">
|
||||
<meta name="author" content="veedeeämkoo">
|
||||
|
||||
<title>Jäsenrekisteri</title>
|
||||
|
||||
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
|
||||
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
|
||||
<!-- Bootstrap -->
|
||||
<link href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel = "stylesheet">
|
||||
|
||||
<!-- Include all compiled plugins (below), or include individual files as needed -->
|
||||
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
|
||||
|
||||
<!-- Custom CSS -->
|
||||
<link href="../static/css/simple-sidebar.css" rel="stylesheet">
|
||||
|
||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
|
||||
<!--[if lt IE 9]>
|
||||
<script src = "https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
|
||||
<script src = "https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!--AngularJS-->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.min.js"></script>
|
||||
<script src = "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-route.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
|
||||
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js'></script>
|
||||
{%load staticfiles %}
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div id="sidebar-wrapper">
|
||||
<ul class="sidebar-nav">
|
||||
<li><a href="#/list">Listaa jäsenet</a></li>
|
||||
<li><a href="#/add">Lisää jäsen</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /#sidebar-wrapper -->
|
||||
|
||||
<!-- Page Content -->
|
||||
<div class="col-lg-12">
|
||||
<h1>Aalto-yliopiston Sähköinsinöörikilta RY:n jäsenrekisteri</h1>
|
||||
<div ng-view></div>
|
||||
<script src="../js/remove_member.js"></script>
|
||||
<script src="../js/post_member.js"></script>
|
||||
|
||||
<script type="text/ng-template" id="addStudent.htm">
|
||||
|
||||
<div ng-app="getMemberApp" ng-controller="getController">
|
||||
|
||||
<table id="choose-address-table" class="ui-widget ui-widget-content">
|
||||
<thead>
|
||||
<tr ng-repeat="ui-widget-header">
|
||||
<th>ID</th>
|
||||
<th>Etunimi</th>
|
||||
<th>Sukunimi</th>
|
||||
<th>Sähköposti</th>
|
||||
<th>AYY-jäsen</th>
|
||||
<th>JAS-listalla</th>
|
||||
<th>Asuinpaikka</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="x in members">
|
||||
<td>{{ x.id }}</td>
|
||||
<td>{{ x.first_name }}</td>
|
||||
<td>{{ x.last_name }}</td>
|
||||
<td>{{ x.email }}</td>
|
||||
<td>{{ x.AYY }}</td>
|
||||
<td>{{ x.jas }}</td>
|
||||
<td>{{ x.POR }}</td>
|
||||
<td>
|
||||
<input type="button" value="Remove" class="btn btn-primary" ng-click="removeMember(x.id)"></input>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/ng-template" id="viewStudents.htm">
|
||||
<div ng-app="postApp" ng-controller="postController">
|
||||
|
||||
<div id="input_form">
|
||||
<form name="memberForm" ng-submit="submitForm()">
|
||||
<div class="form-group">
|
||||
<label>Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="Sähkö" class="form-control" ng-model="firstName"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insinööri" class="form-control" ng-model="lastName"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sähköposti: </label>
|
||||
<input id="emailField" required type="text" placeholder="sahko.insinoori@aalto.fi" class="form-control" ng-model="email"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>AYY jäsen: </label>
|
||||
<input type="checkbox" id="AYY" value="0" ng-model="AYY"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>JAS-listaan: </label>
|
||||
<input type="checkbox" id="JAS" value="0" ng-model="JAS"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Asuinkunta: </label>
|
||||
<input id="PORField" required type="text" placeholder="Otaniemi" class="form-control" ng-model="POR"></input>
|
||||
</div>
|
||||
<button ng-click="send()" type="submit" id="sendmember">Tallenna</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
</div>
|
||||
<!-- /#page-content -->
|
||||
|
||||
<script>
|
||||
var memberlistApp = angular.module("memberlistApp", ['ngRoute']);
|
||||
memberlistApp.config(['$routeProvider', function($routeProvider) {
|
||||
$routeProvider.
|
||||
|
||||
when('/list', {
|
||||
templateUrl: 'addStudent.htm',
|
||||
controller: 'AddStudentController'
|
||||
}).
|
||||
|
||||
when('/add', {
|
||||
templateUrl: 'viewStudents.htm',
|
||||
controller: 'ViewStudentsController'
|
||||
}).
|
||||
|
||||
otherwise({
|
||||
redirectTo: '/list'
|
||||
});
|
||||
}]);
|
||||
|
||||
memberlistApp.controller('AddStudentController', function($scope) {
|
||||
$scope.content = "This page will be used to display add student form";
|
||||
});
|
||||
|
||||
memberlistApp.controller('ViewStudentsController', function($scope) {
|
||||
$scope.content = "This page will be used to display all the students";
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<!--<script src="../static/appData.js"></script>
|
||||
|
||||
<script src="lib/angular/angular.js"></script>
|
||||
|
||||
<script src="../static/js/app.js"></script>
|
||||
<script src="../static/js/services.js"></script>
|
||||
<script src="../static/js/controllers.js"></script>-->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,46 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" ng-app="memberApp">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="uli uli">
|
||||
<meta name="author" content="veedeeämkoo">
|
||||
|
||||
<title>Jäsenrekisteri</title>
|
||||
|
||||
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
|
||||
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<link href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel = "stylesheet">
|
||||
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.js"></script>
|
||||
<script src = "http://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
|
||||
{%load staticfiles %}
|
||||
<script src="/static/js/members_routers.js"></script>
|
||||
<script src="/static/js/members_controllers.js"></script>
|
||||
<link href="/static/css/simple-sidebar.css" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div id="sidebar-wrapper">
|
||||
<ul class="sidebar-nav">
|
||||
<li><a href="#/list">Listaa jäsenet</a></li>
|
||||
<li><a href="#/add">Lisää jäsen</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /#sidebar-wrapper -->
|
||||
|
||||
<!-- Page Content -->
|
||||
<div class="col-lg-12">
|
||||
<h1>Aalto-yliopiston Sähköinsinöörikilta RY:n jäsenrekisteri</h1>
|
||||
<div ng-view></div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
+1
-1
@@ -5,7 +5,7 @@ from members.models import Member, MemberRequest
|
||||
import json
|
||||
|
||||
def index(request, *args, **kwargs):
|
||||
return render(request, 'index.html',{})
|
||||
return render(request, 'members_index.html',{})
|
||||
|
||||
def members(request, *args, **kwargs):
|
||||
mems = list(map(lambda m: m.get_dict(),Member.objects.all()))
|
||||
|
||||
Reference in New Issue
Block a user