Django-tables2: рд╕реНрддрдВрдн рд╢реАрд░реНрд╖рд▓реЗрдЦ рджреНрд╡рд╛рд░рд╛ рдЫрдБрдЯрд╛рдИ рдХреЗ рдмрд╛рдж рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЕрдЧре░ 2016  ┬╖  32рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jieter/django-tables2

рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдиреНрдп рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХрдИ рдмрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рддрд╛рд▓рд┐рдХрд╛ django рдФрд░ django-tables2 рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред рдореИрдВрдиреЗ рдЙрди рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг (django 1.10, django-tables2 1.2.4) рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛, рдлрд┐рд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рд▓рдЧреАред

рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЪрд┐рддреНрд░ рдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: http://imgur.com/a/pPRT8

рдЬрдм рдореИрдВ рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдСрд░реНрдбрд░ рдЪреБрдиреЗ рдмрд┐рдирд╛ рдЯреЗрдмрд▓ рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рд╕реЙрд░реНрдЯ рдСрд░реНрдбрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдо рд╣реЗрдбрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рддрдХ рдореИрдВрдиреЗ рдкрд╣рдЪрд╛рдирд╛ рд╣реИ рдХрд┐ BoundRows рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рд╕рд╣реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЖрдЗрдЯрдо рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╛рдзреНрдп рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рджреЗрддрд╛ рд╣реИред рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрдиреЗ рдкрд░ рдХреБрдЫ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд▓рдВрдмрд╛рдИ ~ резрелреж рдХреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдкрд░ рд╣реЛ рд░рд╣реА рд╣реИ, рдФрд░ рдореИрдВ (рдЕрднреА рддрдХ) рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдЫреЛрдЯреЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред

рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ рдЙрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рд╣реИред

--- a/django_tables2/rows.py
+++ b/django_tables2/rows.py
@@ -8,6 +8,7 @@ from django.utils import six
 from .columns.linkcolumn import BaseLinkColumn
 from .utils import A, AttributeDict, call_with_appropriate, computed_values

+import sys

 class BoundRow(object):
     """
@@ -187,9 +188,17 @@ class BoundRows(object):
     def __init__(self, data, table):
         self.data = data
         self.table = table
+        for d in data:
+            print >>sys.stderr, d
+
+        print >>sys.stderr, "end data"
+

     def __iter__(self):
         for record in self.data:
+            print >>sys.stderr, "__iter__", record
             yield BoundRow(record, table=self.table)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╡рд╛рд╣, рдЕрдВрдд рдореЗрдВ рддрдп!

рд╣рд╛рдВ, рдореИрдВ рдПрдХ рдШрдВрдЯреЗ рдХреЗ рднреАрддрд░ рд░рд┐рд▓реАрдЬ рдХрд░реВрдВрдЧрд╛ред

рд╕рднреА 32 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рдХреЛ рдХреНрд░рд┐рд╕реНрдЯрд▓реАрдХреГрдд рдХрд░рдирд╛ () рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ:

+++ b/django_tables2/rows.py
@@ -8,6 +8,7 @@ from django.utils import six
 from .columns.linkcolumn import BaseLinkColumn
 from .utils import A, AttributeDict, call_with_appropriate, computed_values

+import sys

 class BoundRow(object):
     """
@@ -187,9 +193,26 @@ class BoundRows(object):
     def __init__(self, data, table):
         self.data = data
         self.table = table


     def __iter__(self):
+        print >>sys.stderr, type(list(self.data.data))

рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕реВрдЪреА рдореЗрдВ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдХреНрдпрд╛ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ django-tables2 рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ Django рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ?

рд╣рд╛рдБ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░рдг рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕реВрдЪреА рдореЗрдВ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рдХрд╛рд░рдг рдЙрдкрдпреБрдХреНрдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдбреЗрдЯрд╛ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ self.data.data рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

@wtfrank , рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдПрдХ рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ django-tables2 рдХреЛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВ: рдореЗрд░реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ, рдПрдХ рдкрдВрдХреНрддрд┐ рдЧрд╛рдпрдм рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдПрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИ ... рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг 1.2.2 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖред
1.2.1 рдореЗрдВ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ "рдареАрдХ" рдХрд░рддрд╛ рд╣реИ.... рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬреЛ рдореИрдВ рдЦреЛрдЬ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдПрдХ рдиреНрдпреВрдирддрдо рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рд╣рдо рдЦрд░рд╛рдм рдХрдорд┐рдЯ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП git bisect рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЗрд╕ рд╕рдордп рдПрдХ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ...

рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ (рдПрд╕рдХреНрд▓рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рдирд░рд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕рдм рдареАрдХ рд╣реИ, рдЬрдмрдХрд┐ рдЙрддреНрдкрд╛рджрди рдореЗрдВ (рдпреВрдбрдмреНрд▓реНрдпреВрдЬреАрдЖрдИ рдФрд░ рдорд╛рдЗрд╕реНрдХреНрд▓ рдЪрд▓рд╛рдирд╛) рдбреБрдкреНрд▓реА рдХреА рд╕рдорд╕реНрдпрд╛ рдореМрдЬреВрдж рд╣реИ ... (рджреЛрдиреЛрдВ рд╡рд╛рддрд╛рд╡рд░рдг рдмрд░рд╛рдмрд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ)

рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рдореЗрдВ рдХреЛрдИ рдбреБрдкреНрд▓реАрдХреЗрдЯ рдирд╣реАрдВ рд╣реИ.... рд▓реЗрдХрд┐рди рдЬрдм рдЯреЗрдмрд▓.рдПрдЪрдЯреАрдПрдордПрд▓ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдо рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реЛрддрд╛ рд╣реИ...

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде рдЬрд▓реНрдж рд╣реА рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖ рд░рд╣рд╛ рд╣реВрдВ :)

1.2.6 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреА рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ #329 рдпрд╛ #330 рдХреЗ рд╕рд╛рде sth рд╣реИ рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореБрдЭреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред

рд╡реЗ рдХреЗрд╡рд▓ 1.2.6 рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕ рдмрдЧ рдХрд╛ рд╕реНрд░реЛрдд рд╣реЛрдВрдЧреЗред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдПрдХ рдЙрдЪрд┐рдд рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдорд╛рдорд▓рд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рд╣реИ (рдпрд╛, рдХрдо рд╕реЗ рдХрдо, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдпрд╣ рдореБрджреНрджрд╛ рд╣реИ) рдФрд░ рдпрд╣ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ 1.2.1 рдФрд░ 1.2.2 рдХреЗ рдмреАрдЪ рд╣реБрдЖ рдерд╛ред .

рдЬрдм рднреА рдореИрдВ 1.2.1 рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реВрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рджрд┐рдЦрддрд╛ рд╣реИред рдЬрдм рдореИрдВ 1.2.2 рдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реВрдВ (рдореИрдВрдиреЗ рдирд╡реАрдирддрдо 1.2.6 рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреА рд╣реИ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ), рдореИрдВ рд▓рдЧрд╛рддрд╛рд░ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЦреЛ рджреЗрддрд╛ рд╣реВрдВ (рддреАрди рдореЗрдВ рд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ рдбреАрдмреА рдореЗрдВ рд╣реИ) рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рдЕрдиреНрдп рдХреА рдПрдХ рдкреНрд░рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм 1.2.1 рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ:

| рддрд╛рд░реАрдЦ | рд╣рд┐рдЯ | ... |
| --- | --- | --- |
| 2016-10-08 | 123 | ... |
| 2016-10-07 | 321 | ... |
| 2016-10-06 | 0 | ... |

рез.реи.реи-рез.реи.рем рдХреЛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд▓рдЧрд╛рддрд╛рд░ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ:

| рддрд╛рд░реАрдЦ | рд╣рд┐рдЯ | ... |
| --- | --- | --- |
| 2016-10-06 | 0 | ... |
| 2016-10-07 | 321 | ... |
| 2016-10-06 | 0 | ... |

рдореИрдВ рдЕрдЬрдЧрд░ 2.7.12 рдкрд░ Django 1.9.9 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдкрд░рд┐рдпреЛрдЬрдирд╛ pydanny/cookiecutter-django (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрд╕рдХреЗ рдмрд╛рдж рднрд╛рд░реА рд╕рдВрд╢реЛрдзрд┐рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореЗрд░рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

class DailySummaryTable(tables.Table):
    class Meta:
        model = DailySummary
        attrs = {"class": "paleblue"}
        empty_text = _("No stats yet")
        fields = ("date", "hits", ...long boring list...)
        # order_by = ("-date",)
        # orderable = False

рдореЙрдбрд▓ рдХреЗ Meta рдХреЗрд╡рд▓ verbose_name{,_plural} рд╕рд╛рдорд╛рди рд╣реИ, рдФрд░ рджреГрд╢реНрдп рдПрдХ рд╕рд╛рдзрд╛рд░рдг DetailView рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

class SourceDetailView(LoginRequiredMixin, DetailView):
    model = Source
    ...
    def get_context_data(self, **kwargs):
        ctx = super(...)
        ctx["stats"] = DailySummaryTable(DailySummary.objects.filter(source=self.object))
        return ctx

рдФрд░ рдбреАрдмреА (рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ 9.6) рдореЗрдВ рддреАрди рдкрдВрдХреНрддрд┐рдпрд╛рдВ рд╣реИрдВ, рд╕рднреА рдореЗрдВ рд╕рдорд╛рди source_id (рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╣реИ), рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╕рднреА рдХреНрд╡реЗрд░реА рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдЕрдЧрд░ рдореИрдВ .filter(source=...) рдХреЛ .all() рд╕реЗ рдмрджрд▓ рджреВрдВ рддреЛ рд╕рдорд╕реНрдпрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдореИрдВ рдмрд╕ рдЗрддрдирд╛ рд╣реА рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╕рд╣рд╛рдпрддрд╛ рдорд┐рд▓реЗрдЧреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВ рдЕрднреА 1.2.1 рдХреЗ рд╕рд╛рде рд░рд╣реВрдВрдЧрд╛ :)

рдЕрдкрдирд╛ рднреНрд░рдордг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдмрд╛рдж рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

рдореИрдВ рдмрд╕ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рд╕реВрдЪреА() рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рдХреЛ рдХреНрд░рд┐рд╕реНрдЯрд▓рд╛рдЗрдЬ рдХрд░рдирд╛ рд╣рдорд╛рд░реА рддрд░рдл рд╕реЗ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

@ op-alex-reid рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдиреНрдпреВрдирддрдо рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ (Django==1.9, django-tables==1.2.3) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде:

class UserPlayerTable(tables.Table):
    actions = tables.LinkColumn('player:my_players_detail', args=[A('slug')],
                                text=_('View / Edit'),
                                verbose_name=_('View / Edit'), empty_values=())
    embed = tables.LinkColumn('player:my_players_embed', args=[A('slug')],
                                text=_('View / Embed now'),
                                verbose_name=_('View / Embed now'), empty_values=())

    class Meta:
        template = 'tables/table.html'
        model = Player
        fields = ('created', 'slug', 'actions', 'embed')
        attrs = {"class": "changeset"}
        order_by = ['-created']
        orderable = False

рддрдерд╛

UserPlayerTable(Player.objects.filter(user=context['impersonate_user']))

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ orderable = True рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реВрдЪреА() _is_ рдПрдХ рд╡рд┐рдХрд▓реНрдк (рдФрд░ рдЕрднреА рдХреЗ рд▓рд┐рдП рдлрд┐рдХреНрд╕) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рдХреЛ рдХреНрд░рд┐рд╕реНрдЯрд▓реАрдХреГрдд рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреЗрд╡рд▓ 5 рдкрдВрдХреНрддрд┐рдпрд╛рдВ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:

class Player(models.Model):
    person = models.ForeignKey(Person)
    created = models.DateTimeField(auto_now_add=True)
    score = models.PositiveIntegerField()

def test_issue_361(per_page=5):

    bob = Person.objects.create(first_name='Bob', last_name='Builder')
    eve = Person.objects.create(first_name='Eve', last_name='Dropper')

    for i in range(10):
        Player.objects.create(person=bob, score=randint(0, 200))
        Player.objects.create(person=eve, score=randint(200, 400))
        Player.objects.create(person=bob, score=5)
        Player.objects.create(person=eve, score=5)

    class UserPlayerTable(tables.Table):
        class Meta:
            model = Player
            fields = ('person.name', 'score',)
            order_by = ['-score']
            orderable = False

    queryset = Player.objects.filter(score=5)

    table = UserPlayerTable(queryset)
    RequestConfig(request, paginate={'per_page': per_page}).configure(table)
    html = table.as_html(request)

    # count the number of rows, subtract one for the header
    assert (html.count('<tr') - 1) == per_page

рд▓реЗрдХрд┐рди рдпрд╣ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ ...

рдореБрдЭреЗ рдЖрдЬ рднреА рдЗрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореИрдВ Django == 1.10 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ django-tables2 == 1.2.9 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдореИрдВ django-filters == 1.0.1 рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рджреЛрд╣рд░реАрдХрд░рдг рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм

  1. рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВ
    (рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдореИрдВ рдкреНрд░рддрд┐ рдкреГрд╖реНрда 25 рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рдкреЗрдЬрд┐рдиреЗрд╢рди рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдХрдИ рд╕рдорд╛рди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ)

  2. рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдПрдХ рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧреИрд░-рддрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ
    (рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдПрдХ рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрд┐рдерд┐рдпреЛрдВ, рдЗрдирдЯреНрд╕ рдпрд╛ рдмреВрд▓ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛрддреА рд╣реИ)

1.2.1 рдореЗрдВ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдбреБрдкреНрд▓реА рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд▓реНрдХрд┐ рджрд┐рдЦрд╛рдпрд╛

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд╣ рддрдХ рдЬрд╛рдиреЗ рдореЗрдВ рдереЛрдбрд╝реА рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ django-tables2 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдордЬрд╝рд╛ рдЖрддрд╛ рд╣реИред

рдЖрдкрдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@ n0ctua рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдЖрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╕рдЯреАрдХ рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╢рд╛рдпрдж рдЙрдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реБрдИ рд╣реИ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рднреА рдпрд╣реА рдХрд╛рд░рдг рд╣реИред _(рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ django-tables2 рдХреЗ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ ... рд╣рд╛рд▓рд╛рдВрдХрд┐ ... рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдХрд░ рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЧреИрд░-рдкреГрд╖реНрдард╛рдВрдХрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рдХреЗ рдмрдЬрд╛рдп db рдХреЗ рд╡рд┐рд░реБрджреНрдз рдПрдХ рд╣реА рдХреНрд╡реЗрд░реА рдЪрд▓рд╛рдИ - рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдиреАрдЪреЗ...)_

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЧреИрд░-рдЕрджреНрд╡рд┐рддреАрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ _SQL order by рдирд┐рдпрддрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм top n рджреНрд╡рд╛рд░рд╛ рд╕рдВрдпреБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдмрд╛рд░-рдмрд╛рд░ рд╡рд╣реА рд╢реАрд░реНрд╖ n рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдорд┐рд▓рддреА рд╣реИрдВред (рд╕рд╛рде рд╣реА, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЬрдм рдореИрдВ рдмрд┐рдирд╛ рдкреЗрдЬрд┐рдиреЗрд╢рди рдХреЗ Table рдмрдирд╛рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ _every_ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдЖрдИрдИ top 1 )ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХрд┐ рд╣рдореЗрд╢рд╛ рдЕрдВрддрд┐рдо order by рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреНрд╖реЗрддреНрд░ рдкрд░ рд╣реЛред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА? рд╕рд╛рде рд╣реА, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рд╡рд╛рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдХреБрдЫ рдиреЛрдЯреНрд╕ рдЬреЛрдбрд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?

рдПрдХ рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрд╣ рдХрд┐рддрдиреА рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ (рдФрд░ рдЧреИрд░-рдкреГрд╖реНрдард╛рдВрдХрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдЧрддрд┐ рджреЗрдВ) рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП top 1 рдХреНрд╡реЗрд░реА рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪрд▓ рд░рд╣рд╛ рд╣реЛрдЧрд╛ рдХреНрд╡реЗрд░реА рдЬреЛ рд╕рднреА рдкрд░рд┐рдгрд╛рдо рд▓рд╛рддреА рд╣реИред

@iniocean рдЧреИрд░-рдкреГрд╖реНрдард╛рдВрдХрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдЕрдЬреАрдм рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

def test_single_query_for_non_paginated_table(settings):
    '''
    A non-paginated table should not generate a query for each row, but only
    one query to count the rows and one to fetch the rows.
    '''
    from django.db import connection
    settings.DEBUG = True

    for i in range(10):
        Person.objects.create(first_name='Bob %d' % randint(0, 200), last_name='Builder')

    num_queries_before = len(connection.queries)

    class PersonTable(tables.Table):
        class Meta:
            model = Person
            fields = ('first_name', 'last_name')

    table = PersonTable(Person.objects.all())
    request = build_request('/')
    RequestConfig(request, paginate=False).configure(table)
    table.as_html(request)

    # print '\n'.join(q['sql'] for q in connection.queries)
    assert len(connection.queries) - num_queries_before == 2

рдореИрдВрдиреЗ рдЕрд╕рдлрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдард╛рдВрдХрд┐рдд рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХреНрдпреЛрдВ рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдкреЗрдЬрд┐рдиреЗрдЯреЗрдб рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ ... рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореБрдЭреЗ рдРрд╕реА рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдорд┐рд▓реЗрдВрдЧреА рдЬреЛ рдПрдХ рдЧреИрд░-рдЕрджреНрд╡рд┐рддреАрдп рдлрд╝реАрд▓реНрдб рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдкрд░ рдПрдХрд╛рдзрд┐рдХ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдбреБрдкреНрд▓реАрдХреЗрдЯ рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВред

@intiocean рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ 10f5e968bc10552be0ad02ee566513b5d274d5c5 рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рд╣реИ

@рдЬреАрддрд░ рдмрдврд╝рд┐рдпрд╛! рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЧреИрд░-рдкреГрд╖реНрдард╛рдВрдХрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреНрдпреЛрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЧреИрд░-рдЕрджреНрд╡рд┐рддреАрдп рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рдСрд░реНрдбрд░ рдХрд░рдиреЗ рдкрд░ рдЬрдм рдбреЗрдЯрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдлреИрд▓рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ top n ... limit x offset y рдХрд╛рд░рдг рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХрдИ рдкреГрд╖реНрдареЛрдВ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИред

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

рдЗрд╕реА рддрд░рд╣: http://stackoverflow.com/questions/31736700/duplicate-elements-in-django-paginate-after-order-by-call

@wtfrank , @intiocean @n0ctua @ op-alex-reid @fliphess рдореИрдВрдиреЗ рдмрд╕ рдХреБрдЫ рдХрдорд┐рдЯ рдХреЛ рдорд╛рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@intiocean рдпрджрд┐ рд╡рд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕реНрд░реЛрдд рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рдХреЗ рдХреЗрд╡рд▓ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЧреИрд░-рдкреГрд╖реНрдард╛рдВрдХрд┐рдд рдЯреЗрдмрд▓ @jieter рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЧреИрд░-рдкреГрд╖реНрдард╛рдВрдХрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рднреА рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдПрдХ рдХреНрд╡реЗрд░реА рд╣реИред

рдЬрд╛рдБрдЪ:
962f502 рдХреЗ рд╕рд╛рде рдФрд░ 'рдиреЛрдЯреНрд╕' рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рдЫрдБрдЯрд╛рдИ -> рджреЛрд╣рд░рд╛рд╡
image

F853078 рдХреЗ рд╕рд╛рде рдФрд░ 'рдиреЛрдЯреНрд╕' рдХреЙрд▓рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЫрд╛рдБрдЯрдирд╛ -> рдХреЛрдИ рджреЛрд╣рд░рд╛рд╡ рдирд╣реАрдВ
image

рдХрд┐рд╕реА рднреА рдореМрдХреЗ рдкрд░ рдЖрдк @jieter рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╡рд╛рд╣, рдЕрдВрдд рдореЗрдВ рддрдп!

рд╣рд╛рдВ, рдореИрдВ рдПрдХ рдШрдВрдЯреЗ рдХреЗ рднреАрддрд░ рд░рд┐рд▓реАрдЬ рдХрд░реВрдВрдЧрд╛ред

рдЬрд╛рд░реА 1.4.0

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж @jieter!

@jieter рдФрд░ @intiocean рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рджреЛрдиреЛрдВ рдХреЛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдЕрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдирдорд╕реНрддреЗ, рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ 1.21.2 рд╕рдВрд╕реНрдХрд░рдг рдФрд░ Django == 2.0.6 рдкрд░ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИред intiocean рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕реЗ 'рдкреАрдХреЗ' рджреНрд╡рд╛рд░рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрд░реНрдбрд░рд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

applegrew picture applegrew  ┬╖  17рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mpasternak picture mpasternak  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

foldedpaper picture foldedpaper  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

blite picture blite  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

brianmay picture brianmay  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ