Refactor member list to be searchable (#27)

Trigger!

* Added members API endpoint.

* Stubbed out member table.

Search is broken.

* Better, faster member search!

* Add add member button.
This commit is contained in:
Drew Larson
2017-01-24 19:50:23 -06:00
parent 65e71becf4
commit 560141298a
12 changed files with 282 additions and 77 deletions
@@ -0,0 +1,13 @@
from rest_framework import serializers
from rest_framework.serializers import ModelSerializer
from .models import Member
class MemberSerializer(ModelSerializer):
first_name = serializers.CharField(allow_blank=True, required=False)
last_name = serializers.CharField(allow_blank=True, required=False)
class Meta:
model = Member
fields = ('first_name', 'last_name', 'email', 'id')
@@ -1,22 +1,7 @@
{% extends 'dashboard.html' %}
{% load render_bundle from webpack_loader %}
{% block content %}
<div class="mdl-cell mdl-cell--6-col">
<ul class="demo-list-three mdl-list">
{% for member in members %}
<li class="mdl-list__item mdl-list__item--three-line">
<span class="mdl-list__item-primary-content">
<i class="material-icons mdl-list__item-avatar">person</i>
<span>{{ member.full_name }}</span>
<span class="mdl-list__item-text-body">
{{ member.email }}
</span>
</span>
<span class="mdl-list__item-secondary-content">
<a class="mdl-list__item-secondary-action" href="{% url 'member_edit' member_id=member.id %}"><i class="material-icons">edit</i></a>
</span>
</li>
{% endfor %}
</ul>
</div>
<div id="root"></div>
{% render_bundle 'members' %}
{% endblock %}
+6 -1
View File
@@ -1,6 +1,11 @@
from django.conf.urls import url
from .views import MemberFormView, MemberSearchView, MemberSignIn, Members
from .views import MemberFormView, MemberSearchView, MemberSignIn, Members, MemberViewSet
apiRoutes = (
(r'members', MemberViewSet),
)
urlpatterns = [
url(r'^new/$', MemberFormView.as_view(), name='member_new'),
url(r'^search/(?P<query>[\w@\.\+]+)/$', MemberSearchView.as_view(), name='member_search'),
+7 -10
View File
@@ -9,12 +9,13 @@ from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import TemplateView, View
from haystack.query import SearchQuerySet
from rest_framework import serializers
from rest_framework import viewsets
from rest_framework.renderers import JSONRenderer
from rest_framework.serializers import ModelSerializer
from core.models import Visit
from registration.utils import signin_member, get_signed_in_members
from .serializers import MemberSerializer
from .forms import MemberForm
from .models import Member
@@ -64,15 +65,6 @@ class MemberSearchView(View):
return HttpResponse(data, content_type='application/json')
class MemberSerializer(ModelSerializer):
first_name = serializers.CharField(allow_blank=True, required=False)
last_name = serializers.CharField(allow_blank=True, required=False)
class Meta:
model = Member
fields = ('first_name', 'last_name', 'email', 'id')
class VisitSerializer(ModelSerializer):
member = MemberSerializer()
@@ -109,3 +101,8 @@ class Members(TemplateView):
def get(self, request):
members = Member.objects.all()
return self.render_to_response(dict(members=members))
class MemberViewSet(viewsets.ModelViewSet):
queryset = Member.objects.all()
serializer_class = MemberSerializer