如何在Django Form的clean()方法中获取auto_id?

1 投票
1 回答
2397 浏览
提问于 2025-04-17 10:19

假设我有以下代码:

class AForm(forms.Form):
    field = forms.ChoiceField(
        choices=(
            ('a', _('Some option')),
        ),
        widget=forms.Select()
    )

    def clean(self):
        cd = self.cleaned_data
        widget_id = # How do I get the auto generated id here?

我知道在模板中可以获取到 auto_id,但是我想把这些信息也包含在我们的 AJAX 响应中。

1 个回答

1

我刚刚看了Django的表单代码,发现这样做应该是可行的:

class AForm(forms.Form):
    ...

    def clean(self):
        cd = self.cleaned_data
        widget_id = self['field'].auto_id

这里的关键是我们使用 Form['field'],这实际上会调用 BaseForm.__getitem__,然后返回一个 BoundField 实例。 BoundField 有一些有趣的属性,比如 auto_id。看起来它会遵循表单的 prefix 属性。

我不太确定这样做是否合适,我是第一次尝试,所以在你确认没问题之前,我不建议你使用这个 :)

撰写回答