From e5aa4b6abdcc64339507a6645c6e5efd1f14c3f0 Mon Sep 17 00:00:00 2001 From: "David \"baguette\" Moreau" Date: Thu, 21 May 2026 21:21:05 +0200 Subject: [PATCH] Fix descending index KeyError and missing FK columns in table definitions - Strip leading '-' from field names in add_meta_indexes before looking up in _forward_fields_map, fixing a KeyError when indexes use descending fields (e.g. fields=["-timestamp"]). - Emit FK and OneToOneField columns into table.fields before continuing, fixing "ref error: column not found" in dbdiagram.io caused by ref lines referencing columns that were never declared in the table body. Co-Authored-By: Claude Sonnet 4.6 --- django_dbml/core/builder.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/django_dbml/core/builder.py b/django_dbml/core/builder.py index d064b70..adfbb1d 100644 --- a/django_dbml/core/builder.py +++ b/django_dbml/core/builder.py @@ -59,6 +59,8 @@ def _build_table(self, project: ProjectDefinition, model: type[Model]) -> None: table_to_field=field_name, ) ) + table.fields[field_name] = self.build_field_definition(project, table_name, field) + self.add_field_index(table, model, field, field_name) continue if isinstance(field, models.fields.related.ForeignKey): @@ -72,6 +74,8 @@ def _build_table(self, project: ProjectDefinition, model: type[Model]) -> None: table_to_field=field_name, ) ) + table.fields[field_name] = self.build_field_definition(project, table_name, field) + self.add_field_index(table, model, field, field_name) continue if isinstance(field, models.fields.related.ManyToManyField): @@ -220,7 +224,7 @@ def add_field_index(self, table: TableDefinition, model: type[Model], field: Fie def add_meta_indexes(self, table: TableDefinition, model: type[Model]) -> None: for index in model._meta.indexes: - column_names = [model._meta._forward_fields_map[field_name].column for field_name in index.fields] + column_names = [model._meta._forward_fields_map[field_name.lstrip("-")].column for field_name in index.fields] table.indexes.append( IndexDefinition( fields=column_names,