将自定义字段渲染器从Django 1.8迁移到Django 3.2

06odsfpq  于 2023-03-13  发布在  Go
关注(0)|答案(1)|浏览(109)

我正在尝试将Django1.8表单中的自定义字段渲染器迁移到Django3.2。
表单如下所示:

class SomeEditForm(forms.ModelForm):
    job_uuid=forms.CharField(widget=forms.HiddenInput())
    class Meta:
        model=Job
        fields=('status',)
        widgets={'status': forms.RadioSelect(renderer=BSRadioFieldRenderer)}

因此,似乎不再有Rendermixin在其definit()中接受渲染器。我已经阅读了新的源代码,看到RadioSelect现在是ChoiceWidget的子类。我无法将旧的渲染器注入新的结构中。
谁能给我指个方向吗?
谢谢你的帮助!:)

7kqas0il

7kqas0il1#

似乎有一个hacky的工作方式...只是子类形式.RadioSelect和接受渲染器kwarg像这样:

class CustomRadioSelect(forms.RadioSelect):
    def __init__(self, renderer=None, *args, **kwargs):
        super(forms.RadioSelect, self).__init__(*args, **kwargs)

class SomeEditForm(forms.ModelForm):
    job_uuid=forms.CharField(widget=forms.HiddenInput())
    class Meta:
        model=Job
        fields=('status',)
        widgets = {'status': CustomRadioSelect(renderer=BSRadioFieldRenderer)}

请注意,这些类被截断了,我在这里只写了与我遇到的问题相关的部分。

相关问题