diff --git a/changelog/entries/unreleased/bug/primary_key_change_import.json b/changelog/entries/unreleased/bug/primary_key_change_import.json
new file mode 100644
index 0000000000..5b7c0c612d
--- /dev/null
+++ b/changelog/entries/unreleased/bug/primary_key_change_import.json
@@ -0,0 +1,9 @@
+{
+ "type": "bug",
+ "message": "Fix field mapping when importing CSV",
+ "issue_origin": "github",
+ "issue_number": 3259,
+ "domain": "database",
+ "bullet_points": [],
+ "created_at": "2026-01-07"
+}
diff --git a/web-frontend/modules/database/components/table/ImportFileModal.vue b/web-frontend/modules/database/components/table/ImportFileModal.vue
index c4cb751cce..9deec2f652 100644
--- a/web-frontend/modules/database/components/table/ImportFileModal.vue
+++ b/web-frontend/modules/database/components/table/ImportFileModal.vue
@@ -98,7 +98,7 @@
@@ -245,6 +245,18 @@ export default {
}
},
computed: {
+ sortedFields() {
+ // The sort needs to follow the same sort logic as
+ // RowHandler.import_rows(...) in the backend
+ return [...this.fields].sort((a, b) => {
+ const aPrimary = !!a.primary
+ const bPrimary = !!b.primary
+ if (aPrimary !== bPrimary) return aPrimary ? -1 : 1
+ const orderDiff = (a.order ?? 0) - (b.order ?? 0)
+ if (orderDiff !== 0) return orderDiff
+ return a.id - b.id
+ })
+ },
isTableCreated() {
if (!this.job?.table_id) {
return false
@@ -281,7 +293,7 @@ export default {
* All writable fields.
*/
writableFields() {
- return this.fields.filter((field) =>
+ return this.sortedFields.filter((field) =>
this.fieldTypes[field.type].canWriteFieldValues(field)
)
},
@@ -353,7 +365,7 @@ export default {
},
availableUpsertFields() {
const selected = Object.values(this.mapping)
- return this.fields.filter((field) => {
+ return this.sortedFields.filter((field) => {
return (
selected.includes(field.id) && this.fieldTypes[field.type].canUpsert()
)
diff --git a/web-frontend/modules/database/store/field.js b/web-frontend/modules/database/store/field.js
index 68883af524..9144f673b7 100644
--- a/web-frontend/modules/database/store/field.js
+++ b/web-frontend/modules/database/store/field.js
@@ -264,7 +264,6 @@ export const actions = {
const fieldType = $registry.get('field', data.type)
data = populateField(data, $registry)
- commit('UPDATE_ITEM', { id: field.id, values: data })
commit('UPDATE_ITEM', { id: field.id, values: data })
// The view might need to do some cleanup regarding the filters and sortings if the