child class 如何在 Django 中没有 "parent.attrib" 语法的情况下访问其 parent 属性?
How can a child class access its parent attributes without the "parent.attrib" syntax in Django?
我完全糊涂了
在 Django 中,我可以创建一个 child class,它是 PostAdmin(admin.ModelAdmin),其中“admin.ModelAdmin”作为其 parent,并将一个元组分配给“list_display"(提示:list_display 是 admin.ModelAdmin class 的属性)在 PostAdmin 中无需写入 "admin.ModelAdmin.list_display"...而在python 要解决 parent class 的属性,需要使用“parent.attrib”语法
事实是,当我尝试 admin.ModelAdmin.list_display 时,它给了我错误!
这是我的“admin.py”中的代码:
from django.contrib import admin
# Register your models here.
from blog.models import post
class PostAdmin(admin.ModelAdmin):
admin.ModelAdmin.list_display= ('title','publish', 'status')
admin.site.register(post,PostAdmin)
我错过了什么?
我已经搜索了很多关于 python 继承的信息,但无法理解继承在这里的工作方式......确切地说,如何 child class ( PostAdmin) 将“('title','publish', 'status')”分配给它的 parent(ModelAdmin)?
它是如何到达那里的?
这是我通过转到 ModelAdmin 的定义
找到的 admin.ModelAdmin 代码(由 Django 制作并位于 options.py)的某些部分
第一次list_display用在options.py(定义ModelAdmin的地方)
class BaseModelAdmin(metaclass=forms.MediaDefiningClass):
#...
def get_sortable_by(self, request):
"""Hook for specifying which fields can be sorted in the changelist."""
return self.sortable_by if self.sortable_by is not None else self.get_list_display(request)
"""Encapsulate all admin options and functionality for a given model."""
#....
第二次遇到list_display
class ModelAdmin(BaseModelAdmin):
list_display = ('__str__',)
list_display_links = ()
list_filter = ()
list_select_related = False
#.....etc
第三次遇到list_display
def get_changelist_instance(self, request):
"""
Return a `ChangeList` instance based on `request`. May raise
`IncorrectLookupParameters`.
"""
list_display = self.get_list_display(request)
list_display_links = self.get_list_display_links(request, list_display)
# Add the action checkboxes if any actions are available.
if self.get_actions(request):
list_display = ['action_checkbox', *list_display]
sortable_by = self.get_sortable_by(request)
ChangeList = self.get_changelist(request)
return ChangeList(
request,
self.model,
list_display,
list_display_links,
self.get_list_filter(request),
self.date_hierarchy,
self.get_search_fields(request),
self.get_list_select_related(request),
self.list_per_page,
self.list_max_show_all,
self.list_editable,
self,
sortable_by,
)
第四次相遇
def get_list_display(self, request):
"""
Return a sequence containing the fields to be displayed on the
changelist.
"""
return self.list_display
def get_list_display_links(self, request, list_display):
"""
Return a sequence containing the fields to be displayed as links
on the changelist. The list_display parameter is the list of fields
returned by get_list_display().
"""
if self.list_display_links or self.list_display_links is None or not list_display:
return self.list_display_links
else:
# Use only the first item in list_display as link
return list(list_display)[:1]
你做错了。
from django.contrib import admin
# Register your models here.
from blog.models import post
class PostAdmin(admin.ModelAdmin):
list_display= ('title','publish', 'status') ### Set the attribute on this class, not on the base class.
admin.site.register(post, PostAdmin)
我完全糊涂了 在 Django 中,我可以创建一个 child class,它是 PostAdmin(admin.ModelAdmin),其中“admin.ModelAdmin”作为其 parent,并将一个元组分配给“list_display"(提示:list_display 是 admin.ModelAdmin class 的属性)在 PostAdmin 中无需写入 "admin.ModelAdmin.list_display"...而在python 要解决 parent class 的属性,需要使用“parent.attrib”语法 事实是,当我尝试 admin.ModelAdmin.list_display 时,它给了我错误!
这是我的“admin.py”中的代码:
from django.contrib import admin
# Register your models here.
from blog.models import post
class PostAdmin(admin.ModelAdmin):
admin.ModelAdmin.list_display= ('title','publish', 'status')
admin.site.register(post,PostAdmin)
我错过了什么? 我已经搜索了很多关于 python 继承的信息,但无法理解继承在这里的工作方式......确切地说,如何 child class ( PostAdmin) 将“('title','publish', 'status')”分配给它的 parent(ModelAdmin)? 它是如何到达那里的?
这是我通过转到 ModelAdmin 的定义
找到的 admin.ModelAdmin 代码(由 Django 制作并位于 options.py)的某些部分第一次list_display用在options.py(定义ModelAdmin的地方)
class BaseModelAdmin(metaclass=forms.MediaDefiningClass):
#...
def get_sortable_by(self, request):
"""Hook for specifying which fields can be sorted in the changelist."""
return self.sortable_by if self.sortable_by is not None else self.get_list_display(request)
"""Encapsulate all admin options and functionality for a given model."""
#....
第二次遇到list_display
class ModelAdmin(BaseModelAdmin):
list_display = ('__str__',)
list_display_links = ()
list_filter = ()
list_select_related = False
#.....etc
第三次遇到list_display
def get_changelist_instance(self, request):
"""
Return a `ChangeList` instance based on `request`. May raise
`IncorrectLookupParameters`.
"""
list_display = self.get_list_display(request)
list_display_links = self.get_list_display_links(request, list_display)
# Add the action checkboxes if any actions are available.
if self.get_actions(request):
list_display = ['action_checkbox', *list_display]
sortable_by = self.get_sortable_by(request)
ChangeList = self.get_changelist(request)
return ChangeList(
request,
self.model,
list_display,
list_display_links,
self.get_list_filter(request),
self.date_hierarchy,
self.get_search_fields(request),
self.get_list_select_related(request),
self.list_per_page,
self.list_max_show_all,
self.list_editable,
self,
sortable_by,
)
第四次相遇
def get_list_display(self, request):
"""
Return a sequence containing the fields to be displayed on the
changelist.
"""
return self.list_display
def get_list_display_links(self, request, list_display):
"""
Return a sequence containing the fields to be displayed as links
on the changelist. The list_display parameter is the list of fields
returned by get_list_display().
"""
if self.list_display_links or self.list_display_links is None or not list_display:
return self.list_display_links
else:
# Use only the first item in list_display as link
return list(list_display)[:1]
你做错了。
from django.contrib import admin
# Register your models here.
from blog.models import post
class PostAdmin(admin.ModelAdmin):
list_display= ('title','publish', 'status') ### Set the attribute on this class, not on the base class.
admin.site.register(post, PostAdmin)