gpt4 book ai didi

django - 将 Django 的默认小部件更改为自定义小部件

转载 作者:行者123 更新时间:2023-12-03 19:58:17 26 4
gpt4 key购买 nike

我的用例:我想使用不同的 DateInput。但我想减少代码重复。我希望所有不明确需要不同 DateInput 小部件的表单都使用我的自定义小部件。

在没有猴子补丁的情况下有什么改变可以解决这个问题?

例子

模型.py:

class MyModel(models.Model):
date=models.DateField()

表格.py:
class MyForm(forms.ModelForm):
class Meta:
model=MyModel

上面的代码应该使用我的自定义小部件。我不想改变上面的models.py和forms.py,因为有很多。

最佳答案

不幸的是,我认为您无法使用上面列出的确切代码来实现这一点。

如果不破解 django,基本上有两个部分。首先是创建自定义 表单域 ,第二个是默认您的自定义 模型字段到您新创建的表单字段。

要创建自定义表单字段,您可以覆盖现有的 django forms.DateField 并更新小部件。

# form_fields.py
from django.forms import DateField
from myapp.widgets import MyWidget

class MyDateFormField(DateField):
widget = MyWidget

然后在创建表单字段后,您将不得不覆盖 django 模型字段以默认为您的新表单字段
# fields.py
from django.db.models import DateField
from myapp.form_fields import MyDateFormField

class MyDateField(MyDateFormField):
def formfield(self, **kwargs):
defaults = {'form_class': MyDateFormField}
defaults.update(kwargs)
return super(DateField, self).formfield(**defaults)

然后您将拥有您的自定义模型字段,您需要稍微更改您的代码才能使用。
from myapp.fields import MyDateField

class MyModel(models.Model):
date=MyDateField()

这不完全是您所要求的(必须更改模型字段),但希望这能让您朝着正确的方向前进。

关于django - 将 Django 的默认小部件更改为自定义小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28497119/

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