zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Django管理应用程序的高级配置在BookInstance模型的运用【Django】

2023-02-18 16:28:15 时间

Django管理应用程序

Django管理应用程序可以使用的模型自动构建可用于创建、查看、更新和删除记录的站点区域。这可以在开发过程中节省大量时间,使测试模型和查看是否有正确的数据变得容易。根据网站的类型,管理应用程序也可以用于管理生产中的数据。Django项目只建议用于内部数据管理(也就是说,仅适用于组织的管理员或内部人员),因为以模型为中心的方法不一定是所有用户的最佳界面,并且暴露了许多关于模型的不必要的细节。

from .models import Author, Genre, Book, BookInstance

admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Genre)
admin.site.register(BookInstance)

为了登录到管理员站点,我们需要启动员工状态的用户帐户。为了查看和创建记录,我们还需要用户拥有所有对象的记录。可以创建一个“超级用户”帐户,该帐户具有对网站的完全访问权限和使用manage.py所需的所有权限 调用下一个命令。在同一目录中,manage-Py创建一个超级用户。系统将提示输入用户名、电子邮件地址和强密码。

python3 manage.py runserver

高级配置

Django使用注册模型信息创建基本管理站点: 每个模型都有一个单独的记录列表,由__ str__()方法创建并链接到详细视图/表单以进行编辑的字符串ID使用。默认情况下,视图顶部有一个操作菜单,可用于批量删除记录。 用于编辑和添加记录的模型详细记录表单包含模型的所有字段,这些字段按其声明顺序垂直排列。 可以进一步自定义界面,使其更易于使用。可以改进的一些想法: 视图列表:

# Define the admin class
class AuthorAdmin(admin.ModelAdmin):
    pass

# Register the admin class with the associated model
admin.site.register(Author, AuthorAdmin)

为每个记录添加显示的其他字段/信息 添加一个筛选器,以根据日期或其他选择值(如账面付款状态)选择要列出的记录。 向列表视图中的操作菜单添加其他选项,并选择此菜单在表单上的显示位置。 详细信息视图 选择要显示(或排除)的字段、它们的顺序、分组、可编辑、要使用的小部件、方向等。 向记录中添加相关字段以允许内联编辑(例如,在创建作者记录时添加添加和编辑书本记录的功能)。

# Register the Admin classes for Book using the decorator

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    pass

# Register the Admin classes for BookInstance using the decorator

@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
    pass
class AuthorAdmin(admin.ModelAdmin):
    list_display = ('last_name', 'first_name', 'date_of_birth', 'date_of_death')

不幸的是,我们无法直接指定列表_显示中的基因字段,因为它是一个ManyToManyField(Django可以防止这种情况,因为这样做会产生大量的数据库访问“成本”)。相反,我们将定义一个display_基因函数将信息作为字符串(这是我们上面调用的函数;我们将在下面定义它)。

    def display_genre(self):
        """
        Creates a string for the Genre. This is required to display genre in Admin.
        """
        return ', '.join([ genre.name for genre in self.genre.all()[:3] ])
    display_genre.short_description = 'Genre'

一旦列表中有许多项目,就可以过滤显示的项目。这是通过使用_过滤器属性列出要完成的字段来完成的。用BookInstanceAdmin下面的代码段替换当前类。

class BookInstanceAdmin(admin.ModelAdmin):
    list_filter = ('status', 'due_back')
class AuthorAdmin(admin.ModelAdmin):
    list_display = ('last_name', 'first_name', 'date_of_birth', 'date_of_death')
    fields = ['first_name', 'last_name', ('date_of_birth', 'date_of_death')]

在字段属性列表中,表上只能显示这些字段。默认情况下,这些字段是垂直显示的,但如果进一步将它们分组为元组(如上面的日期字段所示),则它们将水平显示。

BookInstance模型

在BookInstance模型中,我们有相关的书籍(信息名称、打印和id),它们将可用(状态、due_back)。我们可以通过将粗体文本添加到BookInstanceAdmin类中,将其添加到不同的部分。

@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
    list_filter = ('status', 'due_back')

    fieldsets = (
        (None, {
            'fields': ('book','imprint', 'id')
        }),
        ('Availability', {
            'fields': ('status', 'due_back')
        }),
    )

每个部分都有自己的标题(如果不需要标题,则为None)和字典中的相关元组-描述的格式很复杂,但如果查看上面的代码片段,它们很容易理解。 有时,同时添加相关记录是有意义的。例如,在同一个详细信息页上同时显示书本信息和有关特定副本的信息可能是有意义的。 可以通过声明inline、键入TabularLine(水平布局)或StackedLine(垂直布局,与默认布局类似)来实现这一点。可以在我们的图书详细信息中添加BookAdmin内容中的BookInstance信息。