From 55ca59943fe2462f1e7474ab319524f7c17a3481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3nio=20Maltsev=20Santos?= Date: Tue, 4 Dec 2018 15:18:26 +0000 Subject: [PATCH] fix foreign key serialization in _format_field_value --- psqlextra/compiler.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/psqlextra/compiler.py b/psqlextra/compiler.py index f7a0ed22..68cdda96 100644 --- a/psqlextra/compiler.py +++ b/psqlextra/compiler.py @@ -1,4 +1,6 @@ from django.core.exceptions import SuspiciousOperation +from django.db.models import Model +from django.db.models.fields.related import RelatedField from django.db.models.sql.compiler import SQLInsertCompiler, SQLUpdateCompiler from psqlextra.expressions import HStoreValue @@ -296,6 +298,11 @@ def _format_field_value(self, field_name) -> str: field_name = self._normalize_field_name(field_name) field = self._get_model_field(field_name) + value = getattr(self.query.objs[0], field.attname) + + if isinstance(field, RelatedField) and isinstance(value, Model): + value = value.pk + return SQLInsertCompiler.prepare_value( self, field, @@ -304,7 +311,7 @@ def _format_field_value(self, field_name) -> str: # value. We rely on pre_save having already been done by the # underlying compiler so that things like FileField have already had # the opportunity to save out their data. - getattr(self.query.objs[0], field.attname) + value ) def _normalize_field_name(self, field_name) -> str: