Change search to POST and add sequence numbers

This commit is contained in:
2020-01-11 04:20:07 +00:00
parent 4e78087338
commit 8c1f1ab3de
6 changed files with 19 additions and 19 deletions

View File

@@ -24,9 +24,12 @@ class UserSerializer(serializers.ModelSerializer):
# member viewing member list or other member
class OtherMemberSerializer(serializers.ModelSerializer):
q = serializers.CharField(write_only=True, max_length=64)
seq = serializers.IntegerField(write_only=True, )
class Meta:
model = models.Member
fields = ['preferred_name', 'last_name', 'status', 'current_start_date']
fields = ['q', 'seq', 'preferred_name', 'last_name', 'status', 'current_start_date']
# member viewing himself
class MemberSerializer(serializers.ModelSerializer):

View File

@@ -13,10 +13,6 @@ class AllowMetadata(permissions.BasePermission):
return request.method in ['OPTIONS', 'HEAD']
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all().order_by('-date_joined')
serializer_class = serializers.UserSerializer
search_strings = {}
def gen_search_strings():
@@ -33,17 +29,17 @@ def gen_search_strings():
print('Generated search strings in {} s'.format(time.time() - start))
gen_search_strings()
class SearchViewSet(viewsets.ReadOnlyModelViewSet):
class SearchViewSet(viewsets.ViewSet):
permission_classes = [AllowMetadata | permissions.IsAuthenticated]
serializer_class = serializers.OtherMemberSerializer
def get_queryset(self):
NUM_SEARCH_RESULTS = 10
queryset = models.Member.objects.all()
params = self.request.query_params
search = self.request.data.get('q', '').lower()
if 'q' in params and len(params['q']):
search = params['q'].lower()
if len(search):
choices = search_strings.keys()
# get exact starts with matches
@@ -68,9 +64,10 @@ class SearchViewSet(viewsets.ReadOnlyModelViewSet):
return queryset
def list(self, request):
# must POST so query string doesn't change so preflight request is cached
def create(self, request):
try:
seq = int(request.query_params.get('seq', 0))
seq = int(request.data.get('seq', 0))
except ValueError:
seq = 0

View File

@@ -6,7 +6,7 @@ from rest_framework import routers
from .api import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
#router.register(r'users', views.UserViewSet)
router.register(r'members', views.MemberViewSet, basename='member')
router.register(r'courses', views.CourseViewSet, basename='course')
router.register(r'sessions', views.SessionViewSet, basename='session')