Django:覆盖RelatedFieldWidgetWrapper

Gio*_*lia 5 django django-forms django-admin

我想更改管理站点中外键的“ +”图标的显示方式。

我发现打印代码的小部件RelatedFieldWidgetWrapper位于中django/contrib/admin/widgets.py

因此,我编写了该类的版本,并更改​​了其render功能。

但是现在我该如何使用呢?我的意思是...在我的模型定义中,我是否必须以formfield_overrides这种方式使用?

formfield_overrides = {
        models.ForeignKey: {'widget': customRelatedFieldWidgetWrapper},
}
Run Code Online (Sandbox Code Playgroud)

我认为这不是正确的方法,因为该小部件不是管理整个外键的小部件,而仅是“ +”图标。我错了吗?

非常感谢。

Dmi*_*nko 5

您需要为 ModelAdmin 创建自定义 ModelForm 并覆盖其中的小部件。

示例代码:

#forms.py
class CustomForm(forms.ModelForm):
    user = forms.ModelChoiceField(queryset=User.objects.all(), widget=yourCustomWidget)

class Meta:
    model = MyModel

#admin.py
class MyModelAdmin(admin.ModelAdmin):
     form = CustomForm
Run Code Online (Sandbox Code Playgroud)