Article

Django中的一些常用方法记录

Django
  • receiver (Django signal)的使用

    @receiver(post_save, sender=Mymodel, dispatch_uid="mymodel_post_save")
    def my_model_handler(sender, **kwargs):
      print('Saved: {}'.format(kwargs['instance'].__dict__))
    

    模型相关:

    • pre_save 对象 save 前触发
    • post_save 对象 save 后触发
    • pre_delete 对象 delete 前触发
    • post_detele 对象 delete 后触发
    • m2m_changed ManyToManyField 字段更新后触发

    请求相关:

    • request_started 一个 request 请求前触发
    • request_finished 一个 request 请求后触发
  • bulk_update 的使用
    用于批量更新数据

    >>> objs = [
    ...    Entry.objects.create(headline='Entry 1'),
    ...    Entry.objects.create(headline='Entry 2'),
    ... ]
    >>> objs[0].headline = 'This is entry 1'
    >>> objs[1].headline = 'This is entry 2'
    >>> Entry.objects.bulk_update(objs, ['headline'])
    
  • bulk_create 的使用
    用于批量创建数据

    >>> Entry.objects.bulk_create([
    ...     Entry(headline='This is a test'),
    ...     Entry(headline='This is only a test'),
    ... ])
    
  • Django filter 常用方法
    __exact 精确等于 like ‘aaa’
    __iexact 精确等于 忽略大小写 ilike ‘aaa’
    __contains 包含 like ‘%aaa%’
    __icontains 包含 忽略大小写 ilike ‘%aaa%’,
    __gt 大于
    __gte 大于等于
    __lt 小于
    __lte 小于等于
    __in 存在于一个list范围内
    __startswith 以…开头
    __istartswith 以…开头 忽略大小写
    __endswith 以…结尾
    __iendswith 以…结尾,忽略大小写
    __range 在…范围内
    __year 日期字段的年份
    __month 日期字段的月份
    __day 日期字段的日
    __isnull=True/False

  • rest-framework reverse 一些小问题
    在使用了 action 装饰器后,自定了一个函数

    @action(methods=['get'], detail=True)
    def fun1_xxx(self, ):
      pass
    

    没有显性定义 url 的情况下,使用 reverse 时,路径应为 reverse('APPNAME-fun1-xxx') 而不是 reverse('APPNAME-fun1_xxx')

Comments

评论

还没有评论。读完如果有想法,可以留下第一声回响。