跳转到主要内容

Django-Hacker:自定义默认Django表单

项目描述

基本用法

使用pip install djhacker安装,然后

import djhacker

djhacker.formfield(
    YourModel.your_field,
    form_class=YourFormField,
    custom_form_field_kwarg='something',
)

这将默认使任何Django ModelForm渲染为YourFormField(custom_form_field_kwarg='something'),加上它想要添加的其他kwargs,您不需要使用任何特定的模型表单,这将在例如admin中本地工作。

自定义表单字段回调

您可以为模型字段类型注册自定义表单字段

@djhacker.register(models.ForeignKey)
def custom_fk_formfield(model_field, **kwargs):
    return dict(
        form_class=YourFormField,
        custom_form_field_kwarg=something,
        **kwargs,
    )

# you don't need to pass extra arguments anymore for ForeignKey fields:
djhacker.formfield(YourModel.some_fk, queryset=Some.objects.all())

小部件脚本属性

Django在不久的将来不会做的是让您自定义脚本标签。这意味着没有简单的方法来组合Widget.Media.js和任何新的脚本标签属性,包括但不限于

  • asyncdefer:用于控制脚本何时加载

  • type="module":将脚本作为EcmaScript Module (ESM)加载并使用导入

让我们来解决这个问题,首先修补Django的Media render_js

import djhacker
djhacker.media_script_attributes()

然后,让我们自定义一个脚本标签

class YourWidget(forms.Widget):
    class Media:
        js = [
            'your/script.js[type=module][defer=true]',
        ]

它将以这种方式渲染

<script src="/static/your/script.js" type="module" defer="true"></script>

升级

到v0.2.x

注册的回调现在返回一个简单的字典,其中包含form_class中的表单字段类。

@djhacker.register(models.ForeignKey)
def custom_fk_formfield(model_field, **kwargs):
    return YourFormField, {
        'custom_form_field_kwarg': 'something',
        **kwargs,
    )

变为

@djhacker.register(models.ForeignKey)
def custom_fk_formfield(model_field, **kwargs):
    return dict(
        form_class=YourFormField,
        custom_form_field_kwarg=something,
        **kwargs,
    )

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码发行版

djhacker-0.2.3.tar.gz (3.4 kB 查看哈希值)

上传时间 源代码

由以下支持