Fix populate_default_values
This commit is contained in:
@ -164,7 +164,10 @@ class SavePrepareMixin(RelationMixin, AliasMixin):
|
|||||||
):
|
):
|
||||||
new_kwargs[field_name] = field.get_default()
|
new_kwargs[field_name] = field.get_default()
|
||||||
# clear fields with server_default set as None
|
# clear fields with server_default set as None
|
||||||
if field.server_default is not None and not new_kwargs.get(field_name):
|
if (
|
||||||
|
field.server_default is not None
|
||||||
|
and new_kwargs.get(field_name, None) is None
|
||||||
|
):
|
||||||
new_kwargs.pop(field_name, None)
|
new_kwargs.pop(field_name, None)
|
||||||
return new_kwargs
|
return new_kwargs
|
||||||
|
|
||||||
|
|||||||
41
tests/test_model_methods/test_populate_default_values.py
Normal file
41
tests/test_model_methods/test_populate_default_values.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import databases
|
||||||
|
import pytest
|
||||||
|
import sqlalchemy
|
||||||
|
from sqlalchemy import text
|
||||||
|
|
||||||
|
import ormar
|
||||||
|
from tests.settings import DATABASE_URL
|
||||||
|
|
||||||
|
database = databases.Database(DATABASE_URL, force_rollback=True)
|
||||||
|
metadata = sqlalchemy.MetaData()
|
||||||
|
|
||||||
|
|
||||||
|
class BaseMeta(ormar.ModelMeta):
|
||||||
|
database = database
|
||||||
|
metadata = metadata
|
||||||
|
|
||||||
|
|
||||||
|
class Task(ormar.Model):
|
||||||
|
class Meta(BaseMeta):
|
||||||
|
tablename = "tasks"
|
||||||
|
|
||||||
|
id: int = ormar.Integer(primary_key=True)
|
||||||
|
name: str = ormar.String(
|
||||||
|
max_length=255, minimum=0, server_default=text("Default Name"), nullable=False
|
||||||
|
)
|
||||||
|
points: int = ormar.Integer(
|
||||||
|
default=0, minimum=0, server_default=text("0"), nullable=False
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_populate_default_values():
|
||||||
|
new_kwargs = {
|
||||||
|
"id": None,
|
||||||
|
"name": "",
|
||||||
|
"points": 0,
|
||||||
|
}
|
||||||
|
result = Task.populate_default_values(new_kwargs)
|
||||||
|
|
||||||
|
assert result["id"] is None
|
||||||
|
assert result["name"] == ""
|
||||||
|
assert result["points"] == 0
|
||||||
Reference in New Issue
Block a user