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

Django提交表单报错'marca_id'列不存在,求解决方案

问题原因

当使用managed=False的模型且关联模型的主键不是默认的id字段时,Django会自动生成关联模型名_id作为外键字段的数据库列名,但你的modelos表中并没有marca_id列,实际关联列是与Marcasmodelos主键对应的marca(或数据库中实际列名,比如Marca),因此触发Unknown column 'marca_id'错误。

解决方案

1. 修正模型外键的数据库列映射

在Modelos模型的外键字段上添加db_column参数,明确指定数据库中实际的列名,与你的表结构完全匹配:

class Modelos(models.Model):
    modelo = models.CharField(db_column='Modelo', primary_key=True, max_length=45)
    marca = models.ForeignKey(Marcasmodelos, 
                              on_delete=models.CASCADE, 
                              related_name='modelos_marca',
                              related_query_name='marcasmodelos', 
                              max_length=20, 
                              to_field='marca', 
                              verbose_name='marca',
                              db_column='Marca')  # 替换为你数据库modelos表中对应marca的实际列名
    tipo_de_producto = models.ForeignKey('Tipoproducto', 
                                         on_delete=models.RESTRICT, 
                                         related_name='modelos_tipo_de_producto', 
                                         related_query_name='tipoproducto', 
                                         verbose_name='Tipo de Producto', 
                                         to_field='tipo_de_producto',
                                         db_column='Tipo de Producto')  # 替换为数据库中对应类型的实际列名
    
    class Meta:
        managed = False
        db_table = 'modelos'

2. 简化视图代码(可选但推荐)

使用ModelForm时无需手动处理外键对象的创建/查询,直接调用form.save()即可自动完成关联映射:

def CargarModelos(request):
    if request.method == 'POST':
        form = ModeloForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('modelos_lista')
    else:
        form = ModeloForm()
    return render(request, 'Compras/CargaModelos.html', {'form': form})
验证步骤
  • 确认数据库modelos表的外键列名与db_column参数值完全一致(注意大小写,MySQL默认不区分但建议精确匹配)
  • 确保Marcasmodelos和Tipoproducto的主键字段与Modelos中to_field参数对应正确
  • 重启Django服务后测试表单提交

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:13:27