Bel*_*dez 58 python django django-forms django-admin django-widget
我的模型中有一个DateTimeField字段.我想将它显示为Django管理站点中的复选框小部件.为此,我创建了一个自定义表单小部件.但是,我不知道如何仅将此自定义窗口小部件用于此字段.
在Django文档解释了如何使用自定义窗口小部件的所有特定类型的字段:
class StopAdmin(admin.ModelAdmin):
formfield_overrides = {
models.DateTimeField: {'widget': ApproveStopWidget }
}
Run Code Online (Sandbox Code Playgroud)
但这并不够精细.我想只为一个字段更改它.
Chr*_*att 122
为您的ModelAdmin创建一个自定义ModelForm并将"小部件"添加到其Meta类中,如下所示:
class StopAdminForm(forms.ModelForm):
class Meta:
model = Stop
widgets = {
'approve_ts': ApproveStopWidget(),
}
fields = '__all__'
class StopAdmin(admin.ModelAdmin):
form = StopAdminForm
Run Code Online (Sandbox Code Playgroud)
完成!
此文件是有点不直观地摆在的ModelForm文档,没有任何提及到它在管理文档中给出.请参阅:从模型创建表单
Bel*_*dez 32
在深入了解管理员,模型字段和表单域代码之后,我相信实现我想要的唯一方法是创建自定义模型字段:
models.pyfrom django.db import models
from widgets import ApproveStopWidget
class ApproveStopModelField(models.DateTimeField):
pass
class Stop(models.model):
# Other fields
approve_ts = ApproveStopModelField('Approve place', null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
admin.pyfrom widgets import ApproveStopWidget
from models import ApproveStopModelField
class StopAdmin(admin.ModelAdmin):
formfield_overrides = {
ApproveStopModelField: {'widget': ApproveStopWidget }
}
Run Code Online (Sandbox Code Playgroud)
它完成了工作.
暂时,我会留下没有答案的问题,因为我有找不到明显问题的习惯.也许一些Django smartypants有更好的解决方案.
And*_*ker 18
像这样覆盖formfield_for_dbfield:
class VehicleAdmin(admin.ModelAdmin):
search_fields = ["name", "colour"]
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'colour':
kwargs['widget'] = ColourChooserWidget
return super(VehicleAdmin, self).formfield_for_dbfield(db_field,**kwargs)
Run Code Online (Sandbox Code Playgroud)
小智 5
Django 的 ModelAdmin.get_changelist_form(self, request, **kwargs) 将解决 list_editable 的问题
class StopAdminForm(forms.ModelForm):
class Meta:
model = Stop
widgets = {
'approve_ts': ApproveStopWidget(),
}
class StopAdmin(admin.ModelAdmin):
form = StopAdminForm
#just return the ModelForm class StopAdminForm
def get_changelist_form(self, request, **kwargs):
return StopAdminForm
Run Code Online (Sandbox Code Playgroud)
我希望这个能帮上忙
| 归档时间: |
|
| 查看次数: |
42771 次 |
| 最近记录: |