Skip to content
Snippets Groups Projects
Commit 7aa9c490 authored by Yirou Qiu's avatar Yirou Qiu
Browse files

add search view. version0.1

parent 1a1e5713
No related branches found
No related tags found
1 merge request!7Yrq/feature/bill api
......@@ -8,10 +8,10 @@ from rest_framework import permissions, authentication
class BillListCreate(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
queryset = Bill.objects.all()
serializer_class = BillSerializer
authentication_classes = [
authentication.SessionAuthentication,
authentication.TokenAuthentication
]
# authentication_classes = [
# authentication.SessionAuthentication,
# authentication.TokenAuthentication
# ]
permission_classes = (permissions.IsAuthenticated,)
def get(self, request, *args, **kwargs):
......@@ -50,10 +50,10 @@ class BillDetail(mixins.RetrieveModelMixin,
generics.GenericAPIView):
queryset = Bill.objects.all()
serializer_class = BillSerializer
authentication_classes = [
authentication.SessionAuthentication,
authentication.TokenAuthentication
]
# authentication_classes = [
# authentication.SessionAuthentication,
# authentication.TokenAuthentication
# ]
permission_classes = (permissions.IsAuthenticated,)
lookup_field = "pk"
......
from rest_framework import generics
from core.models.bill import Bill, BillSearchQuerySet
from core.serializers.bill import BillSerializer
from rest_framework import authentication
class SearchBillListView(generics.ListAPIView):
queryset = Bill.objects.all()
serializer_class = BillSerializer
authentication_classes = [
authentication.SessionAuthentication,
authentication.TokenAuthentication
]
# item = categories -----> keyword = 1/2/3/4/5 ..
# price -----> keyword = price
# date -----> keyword = month / day
# title -----> keyword = title
def get_queryset(self, *args, **kwargs):
qs = BillSearchQuerySet(Bill)
item = self.request.GET.get("item")
result = Bill.objects.none()
user = None
if self.request.user.is_authenticated:
user = self.request.user
keyword = self.request.GET.get("keyword")
if item == "categories":
result = qs.searchCategories(keyword, user=user)
elif item == "price":
result = qs.searchPrice(keyword, user=user)
elif item == "date":
if keyword == "month":
result = qs.searchThisMonth(user=user)
elif keyword == "today":
result = qs.searchToday(user=user)
elif item == "title":
result = qs.searchTitle(keyword, user=user)
print(result)
return result
\ No newline at end of file
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.db.models import Q
from core.models.utils import UUIDModel
import datetime
from datetime import date
from dateutil.relativedelta import relativedelta
# pip install python-dateutil
class BillSearchQuerySet(models.QuerySet):
def searchCategories(self, query, user=None):
lookup = Q(categories = query)
qs = self.filter(lookup)
if user is not None:
qs = self.filter(user=user).filter(lookup)
return qs
def searchPrice(self, query, user=None):
lookup = Q(price=query)
qs = self.filter(lookup)
if user is not None:
qs = self.filter(user=user).filter(lookup)
return qs
def searchThisMonth(self, user=None):
end_date = date.today()
start_date = end_date + relativedelta(months=-1)
lookup = Q(date__range = [start_date, end_date])
qs = self.filter(lookup)
if user is not None:
qs = self.filter(user=user).filter(lookup)
return qs
def searchToday(self, user=None):
end_date = date.today()
start_date = end_date + relativedelta(days=-1)
lookup = Q(date__range = [start_date, end_date])
qs = self.filter(lookup)
if user is not None:
qs = self.filter(user=user).filter(lookup)
return qs
def searchTitle(self, keyword, user=None):
lookup = Q(title__contains = keyword)
qs = self.filter(lookup)
if user is not None:
qs = self.filter(user=user).filter(lookup)
return qs
# def categorieAmount(self, date, categories, user=None):
# if date == "day":
# qs = self.searchCategories(categories, user=user).searchToday(user=user)
# elif date == "month":
# qs = self.searchCategories(categories, user=user).searchThisMonth(user=user)
class BillManager(models.Manager):
def get_queryset(self, *args, **kwargs):
return BillSearchQuerySet(self.model, using = self._db)
class Bill(UUIDModel):
user = models.ForeignKey(User, default=1, null=True, on_delete=models.SET_NULL)
......
......@@ -7,6 +7,7 @@ from core.api.password import ChangePasswordView
from core.api.profile import ProfileViewSet
from core.api.coupon import CouponViewSet
from core.api.bill import *
from core.api.billSearch import SearchBillListView
router = routers.DefaultRouter()
......@@ -32,5 +33,8 @@ urlpatterns += [
# bill
path('api/bill/', bill_list_create_api, name="bill-list"),
path('api/bill/<uuid:pk>/', bill_detail_api, name="bill-detail")
path('api/bill/<uuid:pk>/', bill_detail_api, name="bill-detail"),
# bill search
path('api/bill/search/', SearchBillListView.as_view(), name="bill-search")
]
......@@ -7,3 +7,4 @@ djangorestframework==3.14.0
knox==0.1.14
PyJWT==2.6.0
requests==2.28.2
python-dateutil
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment