# finish smart / mosq api

This commit is contained in:
xianfuxing 2018-07-14 16:14:34 +08:00
parent 5ab7c8faa1
commit 3e2ffed09c
7 changed files with 56 additions and 10 deletions

View File

@ -1,6 +1,6 @@
from rest_framework import serializers from rest_framework import serializers
from mosquito.models import Mosquito, MosqPost from mosquito.models import Mosquito, MosqPost
from smart.api.serializers import SmartListSerializer from smart.api.serializers import SmartPushListSerializer
class MosqListSerializer(serializers.ModelSerializer): class MosqListSerializer(serializers.ModelSerializer):
@ -15,15 +15,18 @@ class MosqListSerializer(serializers.ModelSerializer):
class MosqPostListSerializer(serializers.ModelSerializer): class MosqPostListSerializer(serializers.ModelSerializer):
smart_push = SmartPushListSerializer(read_only=True)
region = serializers.SerializerMethodField() region = serializers.SerializerMethodField()
class Meta: class Meta:
model = MosqPost model = MosqPost
fields = [ fields = [
'id',
'mosq', 'mosq',
'led', 'led',
'energy', 'energy',
'region', 'region',
'smart_push',
'time', 'time',
] ]

View File

@ -1,8 +1,9 @@
from django.urls import path, re_path from django.urls import path, re_path
from .views import MosquitoListAPIView from .views import MosquitoListAPIView, MosquitoPostListAPIView
app_name = 'mosq-api' app_name = 'mosq-api'
urlpatterns = [ urlpatterns = [
path('', MosquitoListAPIView.as_view(), name='list') path('', MosquitoListAPIView.as_view(), name='list'),
path('post/', MosquitoPostListAPIView.as_view(), name='post'),
] ]

View File

@ -7,8 +7,8 @@ from rest_framework.generics import (
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.filters import SearchFilter, OrderingFilter from rest_framework.filters import SearchFilter, OrderingFilter
from django.db.models import Q from django.db.models import Q
from ..models import Mosquito from ..models import Mosquito, MosqPost
from .serializers import MosqListSerializer from .serializers import MosqListSerializer, MosqPostListSerializer
class MosquitoListAPIView(ListAPIView): class MosquitoListAPIView(ListAPIView):
@ -26,3 +26,19 @@ class MosquitoListAPIView(ListAPIView):
Q(region__icontains=query) Q(region__icontains=query)
).distinct() ).distinct()
return queryset_list return queryset_list
class MosquitoPostListAPIView(ListAPIView):
serializer_class = MosqPostListSerializer
filter_backends = [SearchFilter, OrderingFilter]
search_fields = ['mosq__name', 'mosq__region']
def get_queryset(self, *args, **kwargs):
queryset_list = MosqPost.objects.all()
query = self.request.GET.get('q')
if query:
queryset_list = queryset_list.filter(
Q(mosq__name__contains=query) |
Q(mosq__region=query)
).distinct()
return queryset_list

View File

@ -14,6 +14,7 @@ class SmartListSerializer(serializers.ModelSerializer):
class SmartPushListSerializer(serializers.ModelSerializer): class SmartPushListSerializer(serializers.ModelSerializer):
smart = serializers.SerializerMethodField()
class Meta: class Meta:
model = SmartPush model = SmartPush
@ -22,4 +23,7 @@ class SmartPushListSerializer(serializers.ModelSerializer):
'signal', 'signal',
'coordinate', 'coordinate',
'time', 'time',
] ]
def get_smart(self, obj):
return obj.smart.name

View File

@ -1,8 +1,9 @@
from django.urls import path from django.urls import path
from .views import SmartListAPIView from .views import SmartListAPIView, SmartPushListAPIView
app_name = 'smart-api' app_name = 'smart-api'
urlpatterns = [ urlpatterns = [
path('', SmartListAPIView.as_view(), name='list') path('', SmartListAPIView.as_view(), name='list'),
path('push/', SmartPushListAPIView.as_view(), name='push')
] ]

View File

@ -7,8 +7,8 @@ from rest_framework.generics import (
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.filters import SearchFilter, OrderingFilter from rest_framework.filters import SearchFilter, OrderingFilter
from django.db.models import Q from django.db.models import Q
from .serializers import SmartListSerializer from .serializers import SmartListSerializer, SmartPushListSerializer
from ..models import SmartModule from ..models import SmartModule, SmartPush
class SmartListAPIView(ListAPIView): class SmartListAPIView(ListAPIView):
@ -26,4 +26,21 @@ class SmartListAPIView(ListAPIView):
Q(chip_id__contains=query) | Q(chip_id__contains=query) |
Q(region__icontains=query) Q(region__icontains=query)
).distinct() ).distinct()
return queryset_list
class SmartPushListAPIView(ListAPIView):
serializer_class = SmartPushListSerializer
filter_backends = [SearchFilter, OrderingFilter]
search_fields = ['smart__name']
def get_queryset(self, *args, **kwargs):
queryset_list = SmartPush.objects.all()
query = self.request.GET.get('q')
if query:
queryset_list = queryset_list.filter(
Q(smart__name__icontains=query)
).distinct()
return queryset_list return queryset_list

View File

@ -21,3 +21,7 @@ urlpatterns = [
path('api/mosq/', include('mosquito.api.urls')), path('api/mosq/', include('mosquito.api.urls')),
path('api/smart/', include('smart.api.urls')), path('api/smart/', include('smart.api.urls')),
] ]
urlpatterns += [
path('api-auth/', include('rest_framework.urls')),
]