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
相关产品推荐
相关产品推荐

