如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选项。...例如: from django.db import models class Person(models.Model): SHIRT_SIZES = ( ('S', 'Small...p.save() >>> p.shirt_size 'L' >>> p.get_shirt_size_display() 'Large' 文档出处:http://doc.codingdict.com/django.../topics/db/models.html 源码位置:Lib\site-packages\django\db\models\base.py 源码方法: class Model(six.with_metaclass...= {k: v for k, v in User.gender_choice}[p[-1]] print(choice) # result.append(list(p[
在制作网页表单的时候,如果一个选项是必填的,通常会给选项添加一个星号,比如 Typecho 的评论表单: 示例: 姓名 * 然后给星号添加一点...但是有些时候我们可能无法修改 HTML 结构,或者不想添加多余无意义的标签,这时可以利用 CSS 的 after 伪类来制作出一个星号。...还是上边的表单,删除 * 这段代码,然后添加 CSS: .form-group label:after { content: ' *'
继承 change_list.html 模板 新模板 change_list_custom.html 继承 django admin 的 change_list.html Django admin change_list.html...\Lib\site-packages\django\contrib\admin\templates\admin\change_list.html) {% block object-tools %}...object-tools-items %} {% change_list_object_tools %} {% endblock %} {% endblock %} 继承 django... admin 的 change_list.html 的 change_list_custom.html 并添加自定义按钮 {% extends 'admin/change_list.html' %}
每个单选按钮的 value 是投票选项对应的 ID 。每个单选按钮的 name 都是 “choice”。...这意味着,当有人选择了一个单选按钮并提交了表单,将会发送 的 POST 数据是 choice=3。这是 HTML 表单中的基本概念。...当你创建一个表单为了修改服务器端的数据时,请使用 method=”post” 。这不是 Django 特定的技巧;这是优秀的 Web 开发实践。...在 polls/views.py 中添加如下代码: from django.shortcuts import get_object_or_404, render from django.http import...在本例中, request.POST[‘choice’] 返回了所选择的投票项目的 ID ,以字符串的形式。 request.POST 的值永远是字符串形式的。
作者: iotisan 前言 这节笔记将更加深入地处理 admin 站点,包括修改表单更加直观呈现模型数据,快速添加关联对象,以及后台涉及的列表展示、过滤器、搜索框等操作。...1 自定义后台表单 polls/admin.py 通过 admin.site.register(Question) 注册 Question 模型,Django 能够构建一个默认的表单用于展示。...通常来说,你期望能自定义表单的外观和工作方式。你可以在注册模型时将这些设置告诉 Django。...当我们的拥有数十个字段的表单,我们肯定会期望将表单分为几个字段集,这样会更清晰一点: from django.contrib import admin from .models import Question...默认提供 3 个足够的选项字段。” 3 自定义后台更改列表 3.1 显示列表 默认情况下,Django 显示每个对象的 str() 返回的值。但有时如果我们能够显示单个字段,它会更有帮助。
自定义后台 自定义表单 通过admin.site.register(Question)注册Question模型,Django会创建默认的表单在后台显示。...如果表单字段很多,你可能想将它们分成不同部分: from django.contrib import admin from .models import Question class QuestionAdmin...from django.contrib import admin from .models import Choice, Question # ... admin.site.register(Choice...我们想要在创建问题时直接添加很多个选项:将polls/admin.py修改为如下内容: from django.contrib import admin from .models import Choice...默认提供3个选项(extra=3)。 不过,现在选项占用的区域太大了。Django 提供了一种表格式的单行显示关联对象的方法。
admin.site.register(Choice) 现在Choice也可以在admin页面看见了,其中"Add choice"表单应该类似这样: ?...点击它,会弹出一个新增Question的表单,类似Question自己的添加表单。填入相关信息点击保存后,Django自动将该Question保存在数据库,并作为当前Choice的关联外键对象。...如果在创建Question对象的时候就可以直接添加一些Choice,那样操作将会变得简单些。 删除Choice模型对register()方法的调用。...注意,这样多了一个"删除"选项,它允许你删除已经存在的Choice....在配置文件中(mysite/settings.py)在TEMPLATES中添加一个DIRS选项: # mysite/settings.py TEMPLATES = [ { 'BACKEND
这很简单: from polls.models import Choice admin.site.register(Choice) 现在 “Choices” 在 Django 管理网站上是一个可用的选项了...Add choice” 表单 看起来像这样: 该表单中,Poll 字段是一个包含了数据库中每个 poll 的选择框。...如果你在窗口中添加了一 poll 并点击了 “Save” 按钮, Django 会将 poll 保存至数据库中并且动态的添加为你正在查看的 “Add choice” 表单中的 已选择项。...但是,这真是一个低效的将 Choice 对象添加进系统的方式。 如果在创建 Poll 对象时能够直接添加一批 Choices 那会更好。 让我们这样做吧。...在现有的三个插槽的底部,你会发现一个 “Add another Choice” 链接。 如果你点击它,一个新的插槽会被添加。如果想移除添加的插槽, 你可以点击所添加的插槽的右上方的 X 。
页面的底部提供了几个选项: 保存-保存更改并返回此类型对象的更改列表页。 保存并继续编辑——保存更改并重新加载此对象的管理页面。 保存并添加另一个——保存更改并为这种类型的对象加载一个新的空白表单。...通常,您需要定制管理表单的外观和工作方式。可以通过在注册对象时告诉 Django 所需的选项来实现。 通过重新排列编辑表单中的字段来了解其工作原理。...Choice, Question # ... admin.site.register(Choice) 现在,“选择”是 Django 管理员中的可用选项。...“添加选择”表单如下所示: 在该表单中,“Question”字段是一个选择框,包含数据库中的每个问题。Django 知道一个外键应该在管理中表示为一个框。在我们的例子中,目前只存在一个问题。...如果在该窗口中添加一个问题并单击“Save”,Django 会将该问题保存到数据库中,并在您正在查看的“add choice”表单中动态地将其添加为选中的选项。
本篇笔记继续跟着django官方文档创建了一个投票的应用。 它由两部分组成: 一个让人们查看和投票的公共站点。 一个让你能添加、修改和删除投票的管理站点。 ...class Choice(models.Model): # 这个表里定义了一个外键字段,因为一个问题可以有多个选项,每个问题对应每个问题的选项。...(选项类也要注册到里面去,后面会用到) polls/admin.py # django的接口,默认已经引入。...但是这只是前端的表单,我们是需要提交数据到数据库的,目前的这个提交按钮形同虚设,所以我们需要定义一个新的视图函数,然后添加到表单的action属性上。...这个视图函数负责接受表单里的数据,然后将其添加到数据库中。 polls/views.py # Django自带的渲染函数,默认已经引入,404处理函数。
继上篇 django2.0入门教程第三节,介绍了django2.0的视图views和模板template, 本节介绍如何在前台进行投票。...构建一个简单的表单提交页 polls/templates/polls/detail.html {{ question.question_text }} {% if error_message...将问题的相关选项遍历,以单选框显示 form表单用post方式提交数据 配置url polls/urls.py path('/vote/', views.vote, name...question, 'error_message': "必须选择一个选项", }) else: selected_choice.votes...=(question.id,))) 代码解析: request.POST['choice']接收表单页面提交的数据 将投票次数加1,并更新数据库 显示投票结果 polls/views.py from django.shortcuts
自定义Widget 的实例 当Django 渲染Widget 成HTML 时,它只渲染最少的标记 —— Django 不会添加class 的名称和特定于Widget 的其它属性。...设置Widget 实例的样式 如果你想让某个Widget 实例与其它Widget 看上去不一样,你需要在Widget 对象实例化并赋值给一个表单字段时指定额外的属性(以及可能需要在你的CSS 文件中添加一些规则...在处理表单数据的过程中,value_from_datadict 可能调用多次,所以如果你自定义并添加额外的耗时处理时,你应该自己实现一些缓存机制。... choices 当表单字段没有choices 属性时,该属性是随意的。如果字段有choice 属性,当字段的该属性更新时,它将覆盖你在这里的任何设置。...choices 当表单字段没有choices 属性时,这个属性是可选的。如果字段有choice 属性,当字段的该属性更新时,它将覆盖你在这里的任何设置。
对象中的 id 自动关联 q 的 ID,并且 choice 数据库中自动添加一个 q.choice_set.create(choice_text="some text", votes=1) ----...更改顺序 得来全不费工夫,只需使用admin.site.register(Question)注册Question模型,Django就能构造一个默认的表单表示。...通常,你会想要自定义管理界面中表单的外观和功能。 你可以通过在注册对象的时候告知Django一些你想要的选项来完成。 让我们通过对编辑表单上的字段重新排序来看一下它是如何工作的。...extra = 3 # 设置要添加的关联个数 inlines = [ChoiceInline] 设置一个模型中展示的字段 # 用来设置展示的每个模型中的内容 # 可以增加方法名称来展示...list_display = ('question_text', 'pub_date', 'was_published_recently') 增加一个 过滤 选项 list_filter =
创建模块 将在poll应用中创建两个模块:Question和Choice。每个Question包含一个问题和发布日期,每个Choice有两个域:选项文字和投票计数器。...调用create函数构造一个新的Choice对象,执行INSERT 语句,添加choice到#获取的choice set,然后返回新建的Choice对象。...这也就意味着,当某人选择其中一个radio按钮并提交表单时,发送POST数据choice=#,其中#表示所选择的choice的id 2)设置表单的action为 {% url 'polls:vote'...生成的静态文件,比如样式表单。...template可放在Django可访问的任何文件系统,但是保持模板在项目里,是需要好好遵守的约定。 编辑mysite/settings.py,在TEMPLATES设置中添加一个DIRS选项。
比如,这是 Django 后台增加 Question 的一个表单,我们现在需要把Question text 和 Date 的顺序换一下。该怎么做呢?...二、添加关联的对象 一个投票对应了多个选项,但是后台默认没有显示,我们如何在后台关联数据表呢? ...我们在之前就把 Choice 表给注册了,似乎已经关联数据表了,但这样非常的低效,高效的设计是我们在创建一个新的投票问题时就设置好他的选项。...polls/admin.py from django.contrib import admin from .models import Choice, Question class ChoiceInline...表单占据了大量的屏幕区域来显示所有关联的 Choice 对象的字段。
然后再setting.py文件中添加路径 TEMPLATES = [ { ... ...'DIRS': [os.path.join(BASE_DIR, 'templates')] ... }, ] 三、将应用名称添加到setting.py文件INSTALLED_APPS...选项末尾(如果没有) INSTALLED_APPS = [ ......extra = 3 # 在admin页面显示额外三个空白表单 class QuestionAdmin(admin.ModelAdmin): fieldsets = [ (None...) 八、启动server,进入admin页面,创建一些问题和选项 $ python3 manage.py runserver ?
验证给定的值在选项列表中存在。 错误信息的键:required, invalid_choice invalid_choice 错误消息可能包含%(value)s,它将被选择的选项替换掉。...验证给定值存在于选项列表中并且可以强制。 错误信息的键:required, invalid_choice invalid_choice 错误消息可能包含%(value)s,它将被选择的选项替换掉。...ModelAdmin.fields 使用fields选项可以在“添加”和“更改”页面上的表单中进行简单的布局更改,例如仅显示可用字段的一个子集,修改其顺序或将其分组为行。 ...ModelAdmin.filter_vertical 与filter_horizontal相同,但使用过滤器界面的垂直显示,其中出现在所选选项框上方的未选定选项框。...如果您查看管理员中的任何更改列表,您将看到此功能在操作中; Django附带所有型号的“删除所选对象”操作。
前添加一个单选按钮。...这意味着,当有人选择一个单选按钮并提交表单提交时,它将发送一个POST数据 choice=# ,其中#为选择的Choice的ID。这是 HTML表单的基本概念。...由于我们创建一个POST表单(它具有修改数据的作用),所以我们需要小心跨站点请求伪造。Django 自带了一个非常有用的防御系统。...简而言之,所有针对内部URL的POST表单都应该使用 {% csrf_token %}模板标签。 现在,让我们来创建一个Django视图来处理提交的数据。...上面的代码检查KeyError,如果没有给出choice 将重新显示Question表单和一个错误信息。
这意味着,当有人选择一个单选按钮并提交表单提交时,它将发送一个POST数据choice=#,其中# 为选择的Choice的ID。...Django为你提供了一个简单的方法来避免这个困扰,那就是在form表单内添加一条{% csrf_token %}标签,标签名不可更改,固定格式,位置任意,只要是在form表单内。...将下面的代码添加到polls/views.py: # polls/views.py from django.shortcuts import get_object_or_404, render from...上面的try ... except就是用来检查KeyError,如果没有给出choice将重新显示Question表单和错误信息; 在将Choice得票数加1之后,返回一个HttpResponseRedirect...Part3-视图和模板 Django 1.10中文文档-第一个应用Part4-表单和通用视图
例如,Django的管理界面使用自定义模板标签显示“添加/更改”表单页面底部的按钮。...让我们编写一个标记,输出给定Poll对象的选项列表,例如在教程中创建的。...我们将使用这样的标签: {% show_results poll %} ...输出将是这样的: First choice Second choice...按照我们的示例,模板非常简单: {% for choice in choices %} {{ choice }} {% endfor %} 现在,通过调用对象...为了解决这个问题,Django takes_context为包含标记提供了一个选项。
领取专属 10元无门槛券
手把手带您无忧上云