在django,python中用方括号调用类

时间:2014-03-10 14:51:02

标签: python django class

此片段来自djangoproject.com教程。有人能解释为什么这条线是用这种方式写的:

inlines =[ChoiceInline] 

而不是

inlines = ChoiceInline

为什么在类ChoiceInline周围有方括号?


from django.contrib import admin
from naslovnica.models import Poll
from naslovnica.models import Choice

class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 3

class PollAdmin(admin.ModelAdmin):
    fieldsets = [
    (None,               {'fields': ['question']}),
    ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines =[ChoiceInline]
    list_display = ('question', 'pub_date', 'was_published_recently')
    search_fields = ['question']
    list_filter = ['pub_date']

admin.site.register(Poll, PollAdmin)

4 个答案:

答案 0 :(得分:4)

这不是“课堂电话”。这只是一个清单。你可以有多个内联,因此是复数,你需要将它们放在列表或元组中。

答案 1 :(得分:1)

inlines =[ChoiceInline]这不是课堂的召唤。这将创建新列表,其中class为第一个元素。

课程调用将以ChoiceInline()完成。

答案 2 :(得分:1)

内联是InlineModelAdmin,TabularInline或StackedInline的列表。 这允许您为相关模型添加“内联”表单。

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects

  

管理界面能够在与父模型相同的页面上编辑模型。这些被称为内联。

答案 3 :(得分:1)

它接收一个列表或一个Classes元组,因为Django将它用作特殊的ModelAdmin类,就像BaseModelAdmin的扩展名一样。

在内部,Django会对这些类进行实例化,如下所示:

def get_inline_instances(self, request, obj=None):
    inline_instances = []
    for inline_class in self.inlines:
        inline = inline_class(self.model, self.admin_site)
        if request:
            if not (inline.has_add_permission(request) or
                    inline.has_change_permission(request, obj) or
                    inline.has_delete_permission(request, obj)):
                continue
            if not inline.has_add_permission(request):
                inline.max_num = 0
        inline_instances.append(inline)

    return inline_instances

为了更好地理解,我建议您在django.contrib.admin中查看选项文件:https://github.com/django/django/blob/master/django/contrib/admin/options.py