utils.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2017 jianglin
  5. # File Name: utils.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2017-03-29 13:33:03 (CST)
  9. # Last Update:星期二 2017-5-2 12:21:37 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from datetime import datetime, timedelta
  14. one_day = datetime.now() + timedelta(days=-1)
  15. one_week = datetime.now() + timedelta(days=-7)
  16. one_month = datetime.now() + timedelta(days=-30)
  17. one_year = datetime.now() + timedelta(days=-365)
  18. def gen_topic_filter(query_dict=dict(), keys=[], equal_key=[], user=None):
  19. filter_dict = {}
  20. keys = list(set(keys) & set(query_dict.keys()))
  21. within = query_dict.pop('within', None)
  22. if within == '1':
  23. filter_dict.update(created_at__gte=one_day)
  24. elif within == '2':
  25. filter_dict.update(created_at__gte=one_week)
  26. elif within == '3':
  27. filter_dict.update(created_at__gte=one_month)
  28. elif within == '4':
  29. filter_dict.update(created_at__gte=one_year)
  30. for k in keys:
  31. if k in equal_key:
  32. filter_dict.update(**{k: query_dict[k]})
  33. else:
  34. new_k = '%s__contains' % k
  35. filter_dict.update(**{new_k: query_dict[k]})
  36. if user is not None and user.is_authenticated:
  37. filter_dict.update(user__id=user.id)
  38. return filter_dict
  39. def gen_topic_orderby(query_dict=dict(), keys=[], date_key=True):
  40. keys.append('id')
  41. order_by = ['-id']
  42. # order_by = ['-is_top', '-id']
  43. orderby = query_dict.pop('orderby', None)
  44. desc = query_dict.pop('desc', None)
  45. if orderby == '0':
  46. order_by = ['created_at']
  47. elif orderby == '1':
  48. order_by = ['author_id']
  49. if desc == '0':
  50. order_by = ['-%s' % i for i in order_by]
  51. order_by = ['-is_top'] + order_by
  52. return tuple(order_by)