当前位置: 首页 > 面试题库 >

Django:如何构建自定义表单小部件?

曾珂
2023-03-14
问题内容

我很难找到有关如何编写自定义窗口小部件的文档。

我的问题是:

  • 如果我构建了一个自定义窗口小部件,可以将其等效地用于管理界面或正常形式吗?
  • 如果我想允许用户编辑项目列表,我应该继承什么小部件?我需要重写/实现小部件的哪些方法?
  • 哪种窗口小部件方法负责从用户输入返回到数据模型?

问题答案:

你是对的,Django没有提供有关此特定主题的文档。我建议你查看中的内置小部件django.forms.widgets(我将从下面的模块中引用类)。

如果我构建了一个自定义窗口小部件,可以将其等效地用于管理界面或正常形式吗?

管理员会覆盖一些小部件(请参阅参考资料django.contrib.admin.options.FORMFIELD_FOR_DBFIELD_DEFAULTS)。你可能可以继承ModelAdmin并更改formfield_overrides属性,但是我从来没有做任何事情,ModelAdmin所以我在这里无济于事…

如果我想允许用户编辑项目列表,我应该继承什么小部件?我需要重写/实现小部件的哪些方法?

你的窗口小部件可能与默认窗口小部件没有任何共同之处(Select如果有的话!!)。从中获取子类Widget,如果你发现带有内置函数的任何常用模式,则以后仍可以更改它。

实现以下方法:

  • render(self, name, value, attrs=None, renderer=None)

查看Input.render一个简单的例子。它还支持HTML中包含的用户定义属性。你可能还想添加“ id”属性,请参见MultipleHiddenInput.render如何做。mark_safe直接输出HTML时不要忘记使用。如果你有一个相当复杂的小部件,则可以使用模板渲染(示例)。

-_has_changed(self, initial, data)

可选的。在管理员中用于记录有关更改的消息。

哪种窗口小部件方法负责从用户输入返回到数据模型?

这与小部件无关-Django无法知道早期请求中使用了什么小部件。它只能使用从表单发送的表单(POST)数据。因此,使用field方法Field.to_python将输入转换为Python数据类型(ValidationError如果输入无效,则可能会引发该输入)。



 类似资料:
  • 问题内容: 我有一个自定义TagField表单字段。 如上所示,它使用TextInput表单字段小部件。但是在管理员中,我希望使用Textarea小部件来显示它。为此,存在钩子,但在这种情况下不起作用。 管理员声明为: 这对表单字段窗口小部件没有影响,并且仍使用TextInput小部件呈现。 问题答案: django管理员对其许多字段使用自定义窗口小部件。覆盖字段的方法是创建一个供ModelAdm

  • 我正在尝试做一个工具栏作为这个图像(应用程序topbar): 我想添加按钮,取消和保存,如上图所示。我正试图用ToolbarItems实现这一点,但我得到了[...]按钮,它实际上充当“下拉列表”。 有没有办法让它成为第一个形象?多谢了。

  • 问题内容: 我在Django中启用了用户身份验证模块,但是当我使用它时,它仅询问用户名和两个密码/密码确认字段。我还希望将电子邮件和全名字段全部设置为必填字段。 我已经做到了: 现在,该表单显示了新字段,但是没有将它们保存到数据库中。 我怎样才能解决这个问题? 问题答案: 用户模型中没有调用此字段。 如果要使用原始模型存储名称,则必须将其分别存储为名字和姓氏。 编辑: 如果您只希望表单中的一个字段

  • 本文向大家介绍Django如何自定义分页,包括了Django如何自定义分页的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Django自定义分页的具体代码,供大家参考,具体内容如下 稳扎稳打版 book.html 封装保存版 封装保存版 封装版使用指南 封装版对应的HTML参考 效果图如下:  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 3.4.2 构建类型 默认情况下,Android plugin 会自动的设置工程,构建 release 和 debug 两个版本。 他们主要的差异主要在于是否可以在设备上调试应用以及APK如何签名。 debug 版本会被使用已知的名称/密码自动生成的密钥/证书签名。release 版本在构建过程中不会被签名,需要构建后再签名。 这些配置可以通过一个叫 BuildType 配置。默认情况下,已经创建

  • 下面的这些代码可以帮助您通过CSS文件和SCSS文件,创建和编译 CSS 和 JS 文件的source-maps。 安装依赖 为了运行编译和压缩任务,你必须安装 node 和 npm。 命令行 // (Optional) Install Gulp module globally npm install gulp -g // Install fullpage's build dependen