#595 рдФрд░ #597 рдореЗрдВ рдЕрд╡рд░реЛрд╣реА рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рдХреБрдЫ рдЕрд╡рд░реЛрд╣реА-рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рд╛ рдЬреЛ рдереЛрдбрд╝рд╛ рд╣рдЯрдХрд░ рд▓рдЧрддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рд╕реЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
| рд░рд┐рдХреЙрд░реНрдб | рдореВрд▓реНрдп |
| --- | --- |
| рдП | 3 |
| рдмреА | 1 |
| рд╕реА | - |
| рдбреА | - |
рд╡реИрд▓реНрдпреВ рдХреЙрд▓рдо рдХреЛ рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рд╕реЙрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп, рдЦрд╛рд▓реА рдорд╛рдиреЛрдВ рдХреЛ рд╕реВрдЪреА рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
| рд░рд┐рдХреЙрд░реНрдб | рдореВрд▓реНрдп |
| --- | --- |
| рдмреА | 1 |
| рдП | 3 |
| рд╕реА | - |
| рдбреА | - |
рд▓реЗрдХрд┐рди рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдЫрдБрдЯрд╛рдИ рдХрд░рддреЗ рд╕рдордп, рдЦрд╛рд▓реА рдорд╛рди рд╕реВрдЪреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ:
| рд░рд┐рдХреЙрд░реНрдб | рдореВрд▓реНрдп |
| --- | --- |
| рд╕реА | - |
| рдбреА | - |
| рдП | 3 |
| рдмреА | 1 |
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╕рдордп рдЦрд╛рд▓реА рдореВрд▓реНрдпреЛрдВ рдХреЛ "рдЕрдирджреЗрдЦрд╛" рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреА рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдзрдХреЗрд▓рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЖрд░реЛрд╣реА рдХреЗ рд╕рд╛рдеред рдХреНрдпрд╛ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдХреНрдпрд╛ рдЖрдкрдиреЗ #529 рджреЗрдЦрд╛?
рдУрд╣, рдореИрдВ рдЗрд╕реЗ рдЕрдм рджреЗрдЦрддрд╛ рд╣реВрдВред рд╣рдореНрдо, рд╢рд╛рдпрдж рдореИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдмрдирд╛рдиреЗ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдмрд╣реБрдд рд╕реНрд╡рд╛рдЧрдд рд╣реЛрдЧрд╛!
рд╣рд╛, рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдкреАрдЖрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреБрдж рд╕реЗ рдмрд╛рдд рдХреА рд╣реЛрдЧреАред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ order_FOO()
рд╡рд┐рдзрд┐, рдФрд░ Django рдХреЗ nulls_last
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣:
def order_value(self, QuerySet, is_descending):
if is_descending:
QuerySet = QuerySet.order_by(F('value').desc(nulls_last = True))
else:
QuerySet = QuerySet.order_by(F('value').asc(nulls_last = True))
return (QuerySet,True)
рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреЙрд▓рдо рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣рдореЗрд╢рд╛ рдЦрд╛рд▓реА рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рд╣реИ рдЬрдм рдорд╛рди рдмрд╕ рдЦрд╛рд▓реА рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ django-tables2
order_by
рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рднреАрддрд░ рдХреБрдЫ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдХрд┐рд╕реА рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рд╕реЙрд░реНрдЯ-рд╡рд┐рдж-рдирд▓-рдЕрдВрддрд┐рдо order_FOO()
рд╕рдорд╛рдзрд╛рди рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдмрдВрдж рдорд╛рди рд╕рдХрддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рд╕рдЦреНрддреА рд╕реЗ рдЦрд╛рд▓реА рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рд▓реНрд▓рд╛рддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдПрдХ рдкреАрдЖрд░ рдкрд░ рджреЛрдмрд╛рд░рд╛ рдЧреМрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдЗрд╕ рдЕрдЪреНрдЫреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб @foldedpaper рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :)
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд╛, рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдкреАрдЖрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреБрдж рд╕реЗ рдмрд╛рдд рдХреА рд╣реЛрдЧреАред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░
order_FOO()
рд╡рд┐рдзрд┐, рдФрд░ Django рдХреЗnulls_last
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣:def order_value(self, QuerySet, is_descending): if is_descending: QuerySet = QuerySet.order_by(F('value').desc(nulls_last = True)) else: QuerySet = QuerySet.order_by(F('value').asc(nulls_last = True)) return (QuerySet,True)
рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреЙрд▓рдо рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣рдореЗрд╢рд╛ рдЦрд╛рд▓реА рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рд╣реИ рдЬрдм рдорд╛рди рдмрд╕ рдЦрд╛рд▓реА рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐
django-tables2
order_by
рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рднреАрддрд░ рдХреБрдЫ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдХрд┐рд╕реА рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рд╕реЙрд░реНрдЯ-рд╡рд┐рдж-рдирд▓-рдЕрдВрддрд┐рдоorder_FOO()
рд╕рдорд╛рдзрд╛рди рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИредрдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдмрдВрдж рдорд╛рди рд╕рдХрддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рд╕рдЦреНрддреА рд╕реЗ рдЦрд╛рд▓реА рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рд▓реНрд▓рд╛рддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдПрдХ рдкреАрдЖрд░ рдкрд░ рджреЛрдмрд╛рд░рд╛ рдЧреМрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред