You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django表单调试时field_val正常,非调试时为空的问题排查

问题:Django表单datalist值在非调试状态下为空,调试时正常显示

正常情况下field_val应被设置为特定值,但实际却被设为空字符串。在VSCode中调试查看该变量时,变量值会正常显示;但非调试状态下值为空。想确认Django表单中是否存在我忽略的惰性求值机制?

我需要在表单提交失败时,将提交的值保留在datalist中,因此尝试从self.instance(Django数据库模型实例)中获取该值。相关代码如下:

class DatalistFieldMixin:
    def make_field_datalist(self, field_name, choices, choice_format=lambda c: c):
        field_val = getattr(self.instance, field_name) or ""

        # Create the datalist widget while setting the html "value" attribute.
        # And set the widget as the form field.
        if self.fields.get(field_name):
            widget = DatalistWidget(
                choices=[choice_format(c) for c in choices],
                attrs={"value": field_val},
            )
            self.fields[field_name].widget = widget


class ObjectAdminForm(DatalistFieldMixin, forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.make_field_datalist(
            field_name="broadsign_active_container_id",
            choices=BroadsignContainer.objects.all(),
            choice_format=lambda c: (
                c.container_id,
                " - ".join((str(c.container_id), c.container_name)),
            ),
        )

问题演示动图:
问题演示

内容的提问来源于stack exchange,提问作者BcK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:18:11