filters.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #coding=utf-8
  2. from django.utils import timezone
  3. import datetime
  4. import django_filters
  5. from apps.base import clean_datetime_range
  6. from .models import *
  7. from apps.customer.models import Customer
  8. from apps.account.models import Branch
  9. class BranchFilter(django_filters.FilterSet):
  10. name = django_filters.CharFilter(field_name='name',lookup_expr='icontains')
  11. tel = django_filters.CharFilter(field_name='tel', lookup_expr='icontains')
  12. enabled = django_filters.CharFilter(field_name='product_base__enabled')
  13. class Meta:
  14. model = Branch
  15. fields = (
  16. 'name', 'tel', 'enabled'
  17. )
  18. def __init__(self, data=None, *args, **kwargs):
  19. data = clean_datetime_range(data, 'create_time')
  20. super(BranchFilter, self).__init__(data, *args, **kwargs)
  21. class CustomerFilter(django_filters.FilterSet):
  22. nickname = django_filters.CharFilter(field_name='nickname', lookup_expr='icontains')
  23. tel = django_filters.CharFilter(field_name='tel', lookup_expr='icontains')
  24. class Meta:
  25. model = Customer
  26. fields = '__all__'
  27. class MemberCouponFilter(django_filters.FilterSet):
  28. write_off = django_filters.CharFilter(field_name='write_off')
  29. coupon_name = django_filters.CharFilter(field_name='coupon__name', lookup_expr='icontains')
  30. activity_name = django_filters.CharFilter(field_name='activity__title', lookup_expr='icontains')
  31. not_used = django_filters.CharFilter(method='find_not_used')
  32. used = django_filters.CharFilter(method='find_used')
  33. overdue = django_filters.CharFilter(method='find_overdue')
  34. class Meta:
  35. model = MemberCoupon
  36. fields = '__all__'
  37. def find_not_used(self, queryset, *args):
  38. if args[1]:
  39. now = datetime.datetime.date(timezone.now())
  40. queryset = queryset.filter(write_off=False, end_date__gt=now)
  41. return queryset
  42. def find_used(self, queryset, *args):
  43. if args[1]:
  44. queryset = queryset.filter(write_off=True)
  45. return queryset
  46. def find_overdue(self, queryset, *args):
  47. if args[1]:
  48. now = datetime.datetime.date(timezone.now())
  49. queryset = queryset.filter(write_off=False, end_date__lt=now)
  50. return queryset
  51. class OrderFilter(django_filters.FilterSet):
  52. activity_name = django_filters.CharFilter(field_name='activity__title', lookup_expr='icontains')
  53. delete = django_filters.CharFilter(field_name='delete')
  54. class Meta:
  55. model = Order
  56. fields = '__all__'