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

Django ModelForm添加ID字段不显示问题求助

问题原因及解决办法

1. 主键字段默认被设为隐藏组件

Django的ModelForm会自动将主键(id)字段的渲染组件设置为HiddenInput,哪怕你把id加入了fields列表,它也只会生成隐藏的输入框,不会在页面上显示出来。

解决办法:手动修改id字段的组件为只读的文本输入框,有两种方式:

方式一:在Form类中显式定义id字段

class ProductVideoForm(forms.ModelForm):
    # 显式定义id字段,设置为只读文本框
    id = forms.CharField(widget=forms.TextInput(attrs={'readonly': 'readonly'}))
    
    class Meta:
        model = ProductVideo
        translatable_fields = get_translatable_fields(ProductVideoTranslation)
        fields = [
            "product",
            "id",
            "type",
            "placeholder",
        ] + translatable_fields
        widgets = {
            "placeholder": ImageInput(),
        }
        trans_fields_per_lang = get_trans_fields_per_lang(translatable_fields)

方式二:在Meta的widgets中配置

class ProductVideoForm(forms.ModelForm):
    class Meta:
        model = ProductVideo
        translatable_fields = get_translatable_fields(ProductVideoTranslation)
        fields = [
            "product",
            "id",
            "type",
            "placeholder",
        ] + translatable_fields
        widgets = {
            "placeholder": ImageInput(),
            # 给id字段设置只读文本框组件
            "id": forms.TextInput(attrs={'readonly': 'readonly'}),
        }
        trans_fields_per_lang = get_trans_fields_per_lang(translatable_fields)

2. 模板未渲染表单的具体字段

你当前的模板只渲染了{{ video_formset.management_form }},这只是表单集的管理字段(用于跟踪表单数量、删除状态等),并不会渲染每个表单里的具体字段。

解决办法:在模板中遍历表单集,渲染每个表单的字段:

{{ video_formset.management_form }}
{% for form in video_formset %}
    <!-- 渲染id字段 -->
    <div>
        <label>ID:</label>
        {{ form.id }}
    </div>
    <!-- 渲染其他字段 -->
    {{ form.product }}
    {{ form.type }}
    {{ form.placeholder }}
    <!-- 渲染多语言字段 -->
    {% for lang_fields in form.trans_fields_per_lang %}
        {{ lang_fields }}
    {% endfor %}
{% endfor %}

这样修改后,id字段就会以只读的形式显示在页面上了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:33:24