Skip to content

Commit c4664bb

Browse files
authored
Fix DatatypeMismatch on bulk insert for tables with formula fields (baserow#4993)
1 parent 0b1edf4 commit c4664bb

3 files changed

Lines changed: 49 additions & 0 deletions

File tree

backend/src/baserow/contrib/database/fields/fields.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,9 @@ def __class__(self):
223223
# expression field.
224224
return self.expression_field.__class__
225225

226+
def get_placeholder(self, value, compiler, connection):
227+
return "%s"
228+
226229
def get_transform(self, name):
227230
# When a model field of this type is pickled and stored in the Baserow model
228231
# cache, the lookups on the class setup in the __init__ are not persisted.

backend/tests/baserow/contrib/database/rows/test_rows_handler.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
extract_user_field_names_from_params,
1717
get_include_exclude_fields,
1818
)
19+
from baserow.contrib.database.fields.handler import FieldHandler
1920
from baserow.contrib.database.fields.models import SelectOption
2021
from baserow.contrib.database.rows.exceptions import RowDoesNotExist
2122
from baserow.contrib.database.rows.handler import RowHandler
@@ -1082,6 +1083,42 @@ def test_import_rows_with_read_only_field(
10821083
assert len(rows) == 0
10831084

10841085

1086+
@pytest.mark.django_db
1087+
def test_import_rows_with_broken_lookup_field(data_fixture):
1088+
user = data_fixture.create_user()
1089+
table = data_fixture.create_database_table(user=user)
1090+
table2 = data_fixture.create_database_table(user=user, database=table.database)
1091+
data_fixture.create_text_field(name="primary", table=table, primary=True)
1092+
target_field = data_fixture.create_text_field(
1093+
name="target", table=table2, primary=True
1094+
)
1095+
1096+
linkrowfield = FieldHandler().create_field(
1097+
user, table, "link_row", name="link", link_row_table=table2
1098+
)
1099+
FieldHandler().create_field(
1100+
user,
1101+
table,
1102+
"lookup",
1103+
name="lookup",
1104+
through_field_id=linkrowfield.id,
1105+
target_field_id=target_field.id,
1106+
)
1107+
1108+
FieldHandler().update_field(user, linkrowfield.specific, new_type_name="text")
1109+
1110+
handler = RowHandler()
1111+
rows, report = handler.import_rows(
1112+
user=user,
1113+
table=table,
1114+
data=[["row1", ""], ["row2", ""]],
1115+
send_realtime_update=False,
1116+
)
1117+
1118+
assert len(rows) == 2
1119+
assert report == {}
1120+
1121+
10851122
@pytest.mark.django_db
10861123
@patch("baserow.contrib.database.rows.signals.rows_updated.send")
10871124
@patch("baserow.contrib.database.rows.signals.before_rows_update.send")
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"type": "bug",
3+
"message": "Fix DatatypeMismatch on bulk insert for tables with formula fields",
4+
"issue_origin": "github",
5+
"issue_number": 4992,
6+
"domain": "database",
7+
"bullet_points": [],
8+
"created_at": "2026-03-17"
9+
}

0 commit comments

Comments
 (0)