fix server_default not setting value in defaults, pop server_default fields if set to None, add tests, update docs

This commit is contained in:
collerek
2020-10-28 15:34:40 +01:00
parent 858fbce67f
commit 29d04887b1
8 changed files with 150 additions and 17 deletions

View File

@ -73,16 +73,10 @@ class QuerySet:
def _prepare_model_to_save(self, new_kwargs: dict) -> dict:
new_kwargs = self._remove_pk_from_kwargs(new_kwargs)
new_kwargs = self.model.substitute_models_with_pks(new_kwargs)
new_kwargs = self._populate_default_values(new_kwargs)
new_kwargs = self.model.populate_default_values(new_kwargs)
new_kwargs = self.model.translate_columns_to_aliases(new_kwargs)
return new_kwargs
def _populate_default_values(self, new_kwargs: dict) -> dict:
for field_name, field in self.model_meta.model_fields.items():
if field_name not in new_kwargs and field.has_default():
new_kwargs[field_name] = field.get_default()
return new_kwargs
def _remove_pk_from_kwargs(self, new_kwargs: dict) -> dict:
pkname = self.model_meta.pkname
pk = self.model_meta.model_fields[pkname]
@ -300,6 +294,9 @@ class QuerySet:
if pk and isinstance(pk, self.model.pk_type()):
setattr(instance, self.model_meta.pkname, pk)
# refresh server side defaults
instance = await instance.load()
return instance
async def bulk_create(self, objects: List["Model"]) -> None: