gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:28:29 27 4
gpt4 key购买 nike

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

我的问题是:

  • 如果我构建一个自定义小部件,可以将其等效地用于管理员接口(interface)或正常形式吗?
  • 如果我想允许用户编辑项目列表,我应该子类别类别?我需要覆盖/实现的小部件的哪些方法?
  • 哪种小部件方法负责从用户的输入回到数据模型?

谢谢。

最佳答案

您是正确的,因为Django无法提供有关此特定主题的文档。我建议您在 django.forms.widgets 中查看内置小部件(我将在下面的该模块中引用类)。

If I build a custom widget, can it be used equivalently for the admin interface or for normal forms?

管理员覆盖了一些小部件(请参阅 django.contrib.admin.options.FORMFIELD_FOR_DBFIELD_DEFAULTS )。您可能可以子类ModelAdmin并更改formfield_overrides属性,但是我从来没有使用ModelAdmin做任何事情,所以我在这里无济于事...

If I want to allow the user to edit a list of items, what widget should I subclass? What methods of the widget do I need to override/implement?

您的小部件可能与默认小部件没有任何共同点(使用Select(如果有)?!)。来自Widget的子类,如果您找到了内置的任何常见模式,则稍后仍然可以更改。

实现以下方法:

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

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

  • _has_changed(self, initial, data)

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

What widget method is responsible for going from the user's input back to the data model?

与小部件无关-Django不知道早期请求中使用了哪些小部件。它只能使用从表单发送的表单(帖子)数据。因此,字段方法Field.to_python用于将输入转换为python数据类型(如果输入无效,则可以提高ValidationError)。

关于python - Django:如何构建自定义表单小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4707192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com