Django-tables2: рдореЗрдЯрд╛ рд╡рд┐рдХрд▓реНрдк рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реЗ рд╣реИрдВред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рдЬреБрд▓ре░ 2012  ┬╖  17рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jieter/django-tables2

рдирдорд╕реНрддреЗ,

рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрдмрд▓ рд╣реИрдВ: -

    class BaseTable(tables.Table):
        select_column = tables.CheckBoxColumn(verbose_name='', empty_values=('NA',))

        class Meta:
            attrs = {'class' : 'cool_table'}

    class EditableTable(BaseTable):
        edit_column = EditIconColumn(verbose_name=_('Edit'))

        def set_editable(self, flag):
            if flag:
                self.base_columns['edit_column'].visible = True
            else:
                self.base_columns['edit_column'].visible = False   

    class RoomTable(EditableTable):
        number = tables.Column()
        speciality = tables.Column()
        photo = ImageViewColumn(accessor='room_type.photo')

рдЬрдм рдореИрдВ RoomTable рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдЙрддреНрдкрдиреНрди <table> рдореЗрдВ class рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдореИрдВ рдЙрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рддрднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ рдЬрдм рдореИрдВ Meta рд╡рд░реНрдЧ рдХреЛ BaseTable рд╕реЗ RoomTable рд▓реЗ рдЬрд╛рддрд╛ рд╣реВрдВ (рдпрд╛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реВрдВ)ред

рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдпрд╛ рдореИрдВ рдЗрд╕реЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?

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

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

рдзрдиреНрдпрд╡рд╛рджред

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд▓рдЧрднрдЧ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ Meta рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд▓рд┐рдП рдореИрдВ Django рд╢реИрд▓реА рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рдерд╛, рдЕрд░реНрдерд╛рдд

class Meta(Parent.Meta):
    ...

рддреЛ рдЕрдм рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдиреЗ рд▓рдЧрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЕрд╕рдВрдЧрдд рд░рд╣рд╛ рд╣реИ, django_tables2.Table рдХреЗ рдкрд╣рд▓реЗ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдЖрдкрдХреЛ _don't_ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ class Meta(django_tables2.Tables): , рд▓реЗрдХрд┐рди рдЖрдЧреЗ рдХрд┐рд╕реА рднреА рдЙрдкрд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЖрдк _do_ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ django_tables2.Table.Meta API рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ _starts_ рд╣реИред рдЗрд╕ рдкрд░ рдЖрдкрдХреА рдХреНрдпрд╛ рднрд╛рд╡рдирд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ Django рдХреЗ рдореЙрдбрд▓ рдХреА рдореЗрдЯрд╛ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рдЗрд╕рдХреЗ рдЕрд▓рдЧ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ? рдпрд╛ рдЖрдк Django рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЕрдиреБрднрд╡рд╣реАрди рдереЗ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдкрдиреЗ рдЕрднреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ _right_ рдХреНрдпрд╛ рд▓рдЧрд╛?

рдореИрдВрдиреЗ рдЕрднреА рдЖрдкрдХреЗ рдореВрд▓ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдореЗрдЯрд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдк рдмрд╕ рдЙрдкрд╡рд░реНрдЧ рдФрд░ рдХреЙрд▓рдо рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рд╛рдВ рдореИрдВрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рд╕рд╣реА рд▓рдЧрд╛ред рд╡реИрд╕реЗ рднреА, рдореИрдВ рдореЗрдЯрд╛ рд╕рд╛рдорд╛рди рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдирдпрд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмреНрд░рд╛рдбрд▓реА,

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

### Table Definitions ###
# parent class 
import django_tables2 as tables

# generic parent class to handle table styling
class MyAppTable(tables.Table):
    class Meta:
        attrs = {'class': 'render-table'}


# subclass in a separate app
from myapp_helpers.tables import MyAppTable
from django_tables2.utils import A
import django_tables2 as tables

class ItemTable(MyAppTable):

    address_1 = tables.Column()
    address_2 = tables.Column()
    address_3 = tables.Column()
    city = tables.Column()
    state = tables.Column()
    zipcode = tables.Column()

    # need this to fix a bug with the meta class not passing through to subclasses in django-tables2
    class Meta(MyAppTable.Meta):
        pass


## Views ##

# class based view in separate app
from django_tables2 import SingleTableView

# Parent class to make pagination the same across views
class MyAppListView(SingleTableView):

    # default of 10 rows in every table on every page
    table_pagination = {"per_page": 10 }
    template_name = 'generic_list.html'


# subclass of view in local app
class ItemListView(MyAppListView):
    model = Item
    table_class = ItemTable

рдпрджрд┐ рд╡рд░реНрдЧ рдореЗрдЯрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ ItemTable рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдореВрд▓ рд╡рд░реНрдЧ рдореЗрдВ рд╕реЗрдЯ рдХреА рдЧрдИ рдореЗрдЯрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдирд╣реАрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИрдВред рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдРрдкреНрд╕ рдореЗрдВ рд╕рднреА рдЯреЗрдмрд▓реЛрдВ рдкрд░ рд╡рд╣реА рдПрдЯреНрд░реНрд╕ рднреЗрдЬреЗ рдЬрд╛рдПрдВ (рдЬреЛ рдЕрдВрддрддрдГ MyAppTable рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ)

ItemTable рдореЗрдВ рдЦрд╛рд▓реА рдореЗрдЯрд╛ рдХреНрд▓рд╛рд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЬреЛ рдкреИрд░реЗрдВрдЯ рдореЗрдЯрд╛ рдХреНрд▓рд╛рд╕ (MyAppTable) рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИ, рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди DRY рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЦрд┐рд▓рд╛рдл рдХрд╛рдо рдХрд░рддреА рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдХреЗрд╡рд▓ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрдВ рдФрд░ рдЕрднреА рднреА рдХреЗрд╡рд▓ CSS рдХреНрд▓рд╛рд╕ рдХреЛ рдПрдХ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдореЗрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИрдВред рд╕реНрдкреЙрдЯ рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдПред рдХрд╛рдо рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВ! рдзрдиреНрдпрд╡рд╛рджред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдкреИрдЪ рд▓рд┐рдЦрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг Django рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд░реБрдЦ рдпрд╣ рд╣реИ рдХрд┐ рдЪреАрдЬреЛрдВ рдХреЛ Django рдХреЗ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП Django + Python рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реИ?

рд▓рдЧрднрдЧ рдПрдХ рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ Django/рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдЖрджрд░реНрд╢ рд╕реЗ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рджреЗрдиреЗ рдХреЗ рдпреЛрдЧреНрдп рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

a) рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рддрд░реАрдХреЗ рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░реЗрдВ (рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдпрд╛рдж рдХрд░ рд╕рдХрддрд╛ рдерд╛)ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрддрдирд╛ рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реИред
b) 'inherit_meta = False' рдЬреИрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЙрдк-рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдк-рд╡рд░реНрдЧ рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред рдЪреАрдЬреЛрдВ рдХреЛ Django рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЧрд▓рдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╛рд░-рдмрд╛рд░ рдореЗрдЯрд╛ рдХреНрд▓рд╛рд╕ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЬреИрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рд╣рд╕реА/рдЖрд▓рд╕реА рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдПрдХрдорд╛рддреНрд░ рдореБрджреНрджрд╛ рдЬреЛ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрдЧ рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдореМрдЬреВрдж рдбреЗрдЯрд╛), рдЖрджрд┐ред
рдЧ) рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдирд╛рдПрдВред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЬрдм рдореИрдВ рдЗрд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рд╕рд┐рд░ рдореЗрдВ рдкрд░рд┐рджреГрд╢реНрдп рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдЗрд╕ рддрдереНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЪрд░ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЯреВрдЯрдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдордиреЗ рдореЗрдВ рдШрдВрдЯреЛрдВ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЯреВрдЯ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдПрдЧрд╛ред

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

рдП рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ), рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░рддреЗ рд╣реИрдВ:

class Parent(tables.Table):
    class Meta:
        foo = 1

class Child(Parent):
    class Meta(Parent.Meta):
        bar = 2

Child.Meta рдЕрдм foo = 1 _рдФрд░_ bar = 2

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рджред рдРрдкреНрдкрд▓рдЧреНрд░реЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд░рдЦрд╛ рдерд╛ред

рджреЛрд╣, рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБред

рдХрд╛рдордХрд╛рдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реЗрд╢рд╛рдиреА рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдХреБрдЫ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

class Parent(tables.Table):
    class Meta:
        attrs = {...}

class Child(Parent):
    class Meta(Parent.Meta):
         attrs = {'summary': 'A child table'}

NameError рд╕рд╛рде name 'attrs' is not defined рдЙрдард╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрджрд╕реВрд░рдд рд╣реИ:

class Child(Parent):
    class Meta(Parent.Meta):
        pass
     Meta.attrs['summary'] = 'A child table'

рдХреНрдпрд╛ рдЗрд╕ рдмрдЧ рдХрд╛ рдЕрднреА рддрдХ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ? рдЙрдкрд░реЛрдХреНрдд рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред http://stackoverflow.com/questions/21787938/inherit-and-modify-a-meta-class

рдореБрдЭреЗ рджреЛ рдордирдорд╛рдиреА class Meta рдПрдХ рд╕рд╛рде рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред attrs рдХреБрдВрдЬреА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ, attrs рд╕реЗ рдПрдХ рдХреБрдВрдЬреА рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, attrs рдХреЛ рдПрдХ рдирдП рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ, рдЖрджрд┐ред рд╢рд╛рдпрдж рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдПрдХ рд╕рдордЭрджрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗред

рд╡реНрдпрд╡рд╣рд╛рд░ рд╡реИрд╕рд╛ рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ рдЖрдк models.Model рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрдкрд╡рд░реНрдЧ рдереЗред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреА рдмрд╛рдд рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдкреИрд░реЗрдВрдЯ рдХреНрд▓рд╛рд╕ рд╕реЗ рдореЗрдЯрд╛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдХреЙрд▓рдо рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд SO рдкреНрд░рд╢реНрди рдореЗрдВ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

@bradleyayers - рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдЖрдк рдореЗрдЯрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкреЛрд╕реНрдЯ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

@pydolan рд╣рд╛рдВ, рдХреБрдЫ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд▓рд┐рдП рднреА http://stackoverflow.com/questions/21787938/inherit-and-modify-a-meta-class рджреЗрдЦреЗрдВ ред

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

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

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

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

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

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

wtfrank picture wtfrank  ┬╖  32рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ