Exemple #1
0
 def get_field(self, argss, mapping):
     if 'sort' not in argss:
         return ['id']
     order = argss["sort"]
     if order and order['prop'] == 'jobid':
         sql = Case(
             When(Q(jobid=''), then=-1),
             default=Cast('jobid', IntegerField())
         )
         return [sql.asc() if order['order'] == 'ascending' else sql.desc()]
     else:
         return [
             ('' if order['order'] == 'ascending' else '-') +
             mapping[order['prop']] if argss['sort'] is not None else 'id'
         ]
Exemple #2
0
def reorder(_default=AFTER, _reverse=False, **kwargs):
    """
    Return a database expression that can be used in an order_by() so that
    the queryset will be sorted according to the order of values given.
    """
    if not 0 < len(kwargs) <= 1:
        raise TypeError("reorder() takes one non-optional keyword argument")
    fieldname, new_order = kwargs.popitem()

    if _default is BEFORE:
        _default = -1
    elif _default is AFTER:
        _default = len(new_order)

    whens = [When(**{fieldname: v, 'then': i}) for i, v in enumerate(new_order)]

    casewhen = Case(*whens, default=Value(_default), output_field=IntegerField())

    if _reverse:
        return casewhen.desc()
    else:
        return casewhen.asc()