首先,我们需要创建一个用户可以登录到管理网站。 运行 下面的命令:
$ python manage.py createsuperuser
输入你想要的用户名,按回车。
Username: admin
您将被提示输入你想要的电子邮件地址:
Email address: admin@example.com
最后一个步骤是输入你的密码。 您将被要求输入你的 密码两次,第二次的确认。
Password: **********
Password (again): *********
Superuser created successfully.
Django管理网站默认激活。 让我们开始发展 服务器和探索它。
回忆一下第1教程,你开始开发服务器一样:
$ python manage.py runserver
。 您应该看到管理员的登录界面:
在默认情况下是开启的, 登录屏幕会显示在自己的语言中,这取决于你 浏览器的设置和Django是否已经翻译了这门语言。
不匹配你所看到的吗?
如果在这一点上,而不是上面的登录页面,你得到一个错误 报告类似页:
ImportError at /admin/
cannot import name patterns
...
然后你可能使用Django的版本不匹配 教程的版本。
现在,试着登录您在前面步骤中创建的超级用户帐户。 您应该看到Django管理索引页:
运,身份验证框架 Django。
但我们的调查应用程序在哪里? 这不是显示在管理索引页面。
文件,编辑它看起来像这样:
from django.contrib import admin
from polls.models import Question
admin.site.register(Question)
,Django知道它应该显示在 管理索引页:
点击“问题”。 现在你的问题“改变列表”页面。 这个页面 显示数据库中所有的问题,让你选择一个改变它。 有“有什么事吗? 我们创建了第一个教程”问题:
点击“发生什么了? “问题编辑:
注意事项:
- 模型。
- )对应于适当的HTML 输入小部件。 每个类型的字段在Django知道如何展示自己 管理。
- 得到免费的JavaScript 快捷方式。 日期得到一个“今天”快捷键,弹出式日历,和时间 一个“现在”快捷方式,方便弹出列表通常进入时间。
页面的底部部分给你两个选择:
- ——保存更改保存并返回到这种类型的变更清单页面 对象。
- 保存并继续编辑,保存更改并重新加载管理页面 这个对象。
- 保存并添加另一个——保存更改并加载一个新的空白表格 类型的对象。
- 删除,显示删除确认页面。
设置。 改变它,重新加载页面并检查 正确的值。
改变“发布日期”,点击“今天”和“现在”的捷径。 然后 点击“保存并继续编辑。 ”然后单击“历史”在右上角。 您将看到一个页面列出所有更改通过Django管理这个对象, 时间戳和用户名的人的改变:
, Django能够构造一个默认形式表示。 通常,您会希望 自定义外观和管理形式是如何工作的。 你会这样做,告诉 Django的选择你想要注册的对象。
符合:
from django.contrib import admin
from polls.models import Question
class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text']
admin.site.register(Question, QuestionAdmin)
——任何时候你需要改变 管理对象的选择。
上面这个变化使得“发布日期”之前 “问题”字段:
这不是令人印象深刻的只有两个字段,但是许多管理形式 的字段,选择一个直观的可用性是一个重要的细节。
说到拥有很多字段的形式,您可能想要分裂形式 成自定义字段:
from django.contrib import admin
from polls.models import Question
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date']}),
]
admin.site.register(Question, QuestionAdmin)
自定义字段的标题。 这就是我们现在的表单的外观:
类显示一个特定的自定义字段开始崩溃了。 这是有用的,当你有一个长形式包含一个字段的数量 不常用的:
from django.contrib import admin
from polls.models import Question
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
admin.site.register(Question, QuestionAdmin)
, admin页面没有显示的选择。
然而。
。 这很简单:
from django.contrib import admin
from polls.models import Choice, Question
# ...
admin.site.register(Choice)
现在“选择”是一个可用的选项在Django管理。 选择“添加”的形式 是这样的:
盒子。 在我们的例子中,只有一个问题 在这一点上存在。
关系到另一个地方得到这免费。 当你点击“添加 另一个,“你会得到一个弹出窗口的“添加问题”的形式。 如果您添加一个问题 Django的窗口,然后单击“保存”,将保存到数据库并问题 动态地将其添加在“添加选择”选择的选择你 看着。
对象。 让我们实现它。
登记代码阅读:
from django.contrib import admin
from polls.models import Choice, Question
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
管理页面。 通过 默认情况下,提供足够的字段3选择。”
加载“添加问题”页面看到看起来:
,每次你回来的“改变”页面 创建的对象,你得到另一个三个额外的插槽。
最后的三个当前槽你会发现一个“添加另一个选择” 链接。 如果你点击它,一个新的槽将被添加。 如果你想删除 添加槽,你可以点击右上角的X添加槽。 请注意 你不能删除原来的三名的位置。 这张图片显示了添加槽:
宣言写道:
class ChoiceInline(admin.TabularInline):
#...
), 相关对象显示在一个更紧凑,表格格式:
请注意,有一个额外的“删除? ”专栏,允许添加删除行 使用“添加另一个选择”按钮和行已经保存。
现在,admin页面的问题是看起来很好,让我们做一些调整 “改变列表”页面,显示系统中所有的问题。
此时的样子:
管理选项,这是一个 元组显示的字段名称,列,在变化的列表页面 对象:
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date')
自定义 方法从教程1:
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
现在的问题改变列表页面看起来像这样:
默认情况下,方法的名称( 突显出替换为空格),每一行包含字符串 输出的表示。
)几 属性,如下:
class Question(models.Model):
# ...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
。
:
list_filter = ['pub_date']
字段:
,Django 知道要给予适当的过滤器选项:“任何日期”“今天”“过去7天,” “本月”、“今年”。
这是进展顺利。 让我们添加一些搜索功能:
search_fields = ['question_text']
后面的查询 场景,搜索字段的数目限制在一个合理的数目 您的数据库更容易搜索。
所有像你认为他们应该一起工作。
显然,“Django政府”每个管理页面的顶部 荒谬。 它只是占位符文本。
很容易改变,使用Django模板系统。 Django管理 是由Django本身,其接口使用Django的模板吗 系统。
)。 模板可以生活在任何地方在你的文件系统 Django可以访问。 (运行Django无论用户服务器运行。) 然而, 保持你的模板内的项目是一个好习惯。
设置:
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]
是文件系统目录的iterable检查什么时候 加载Django模板;它是一个搜索路径。
)到该目录。
Django源文件在哪里?
如果你有困难找到Django源文件所在的地方 在您的系统上运行以下命令:
$ python -c "
import sys
sys.path = sys.path[1:]
import django
print(django.__path__)"
(包括大 括号)用你自己的网站的名称在您认为合适的地方。 你应该结束了 一段代码:
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
{% endblock %}
属性来更容易 使这个特殊定制。
,这 将评估模板语言生成最终的HTML页面。 不要担心如果你不能现在——任何意义的模板 我们将深入研究Django模板语言教程3。
- - - - - - 它从默认目录复制到您的自定义目录,并使 的变化。
是一个应用程序)。
。 这样,你可能包括调查应用程序在任何新的项目 并保证会找到所需的自定义模板。
更多的 Django是如何找到模板的信息。
同样,您可能想要定制的外观和感觉Django 管理索引页面。
已经 注册与管理应用程序,按字母顺序排列的。 你可能想要 进行重大改革的布局。 毕竟,该指数可能是 管理最重要的页面,它应该很容易使用。
。 该变量包含每一个 安装Django应用程序,而不是使用硬编码的链接 特定对象管理页面,按照你自己的想法是最好的。