рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдиреНрдп рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХрдИ рдмрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рддрд╛рд▓рд┐рдХрд╛ 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)
рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рдХреЛ рдХреНрд░рд┐рд╕реНрдЯрд▓реАрдХреГрдд рдХрд░рдирд╛ () рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ:
+++ 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 рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рджреЛрд╣рд░реАрдХрд░рдг рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм
рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВ
(рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдореИрдВ рдкреНрд░рддрд┐ рдкреГрд╖реНрда 25 рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рдкреЗрдЬрд┐рдиреЗрд╢рди рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдХрдИ рд╕рдорд╛рди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ)
рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдПрдХ рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧреИрд░-рддрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ
(рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдПрдХ рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрд┐рдерд┐рдпреЛрдВ, рдЗрдирдЯреНрд╕ рдпрд╛ рдмреВрд▓ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛрддреА рд╣реИ)
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 рдХреЗ рд╕рд╛рде рдФрд░ 'рдиреЛрдЯреНрд╕' рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рдЫрдБрдЯрд╛рдИ -> рджреЛрд╣рд░рд╛рд╡
F853078 рдХреЗ рд╕рд╛рде рдФрд░ 'рдиреЛрдЯреНрд╕' рдХреЙрд▓рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЫрд╛рдБрдЯрдирд╛ -> рдХреЛрдИ рджреЛрд╣рд░рд╛рд╡ рдирд╣реАрдВ
рдХрд┐рд╕реА рднреА рдореМрдХреЗ рдкрд░ рдЖрдк @jieter рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рд╡рд╛рд╣, рдЕрдВрдд рдореЗрдВ рддрдп!
рд╣рд╛рдВ, рдореИрдВ рдПрдХ рдШрдВрдЯреЗ рдХреЗ рднреАрддрд░ рд░рд┐рд▓реАрдЬ рдХрд░реВрдВрдЧрд╛ред
рдЬрд╛рд░реА 1.4.0
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж @jieter!
@jieter рдФрд░ @intiocean рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рджреЛрдиреЛрдВ рдХреЛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдЕрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдирдорд╕реНрддреЗ, рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ 1.21.2 рд╕рдВрд╕реНрдХрд░рдг рдФрд░ Django == 2.0.6 рдкрд░ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИред intiocean
рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕реЗ 'рдкреАрдХреЗ' рджреНрд╡рд╛рд░рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрд░реНрдбрд░рд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╡рд╛рд╣, рдЕрдВрдд рдореЗрдВ рддрдп!
рд╣рд╛рдВ, рдореИрдВ рдПрдХ рдШрдВрдЯреЗ рдХреЗ рднреАрддрд░ рд░рд┐рд▓реАрдЬ рдХрд░реВрдВрдЧрд╛ред