Skip to content

Commit

Permalink
Merge pull request #6 from yangtianyan/master
Browse files Browse the repository at this point in the history
feat: 增加日期自更字段auto_now_add,auto_now_add;支持默认值为可调用函数
  • Loading branch information
taojy123 authored Aug 14, 2023
2 parents 5080352 + 74e9ebe commit 066903a
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 5 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ var/
*.egg-info/
.installed.cfg
*.egg
.idea

# Installer logs
pip-log.txt
Expand Down
23 changes: 20 additions & 3 deletions nanorm.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,15 +145,19 @@ def __init__(self, default=True):


class DateField(Field):
def __init__(self, default=None):
def __init__(self, default=None, auto_now_add=False, auto_now=False):
self.field_type = "date"
self.default = default
self.auto_now_add = auto_now_add
self.auto_now = auto_now


class DateTimeField(Field):
def __init__(self, default=None):
def __init__(self, default=None, auto_now_add=False, auto_now=False):
self.field_type = "datetime"
self.default = default
self.auto_now_add = auto_now_add
self.auto_now = auto_now


class ForeignKey(Field):
Expand Down Expand Up @@ -186,7 +190,14 @@ def __init__(self, rid=0, **kwargs):
for name in self.field_names:
assert name not in ('op', 'id', 'key'), 'field name should not be `%s`' % name
field = getattr(self.__class__, name.replace("`", ""))
setattr(self, name.replace("`", ""), field.default)
value = field.default
if isinstance(field, DateTimeField) and field.auto_now_add:
value = datetime.datetime.now()
elif isinstance(field, DateField) and field.auto_now_add:
value = datetime.date.today()
if callable(value):
value = value()
setattr(self, name.replace("`", ""), value)
for key, value in kwargs.items():
setattr(self, key.replace("`", ""), value)

Expand Down Expand Up @@ -234,6 +245,12 @@ def field_values(self):
pass
if isinstance(value, Model):
value = value.id
elif isinstance(field, DateTimeField) and field.auto_now:
value = datetime.datetime.now()
setattr(self, name.replace("`", ""), value)
elif isinstance(field, DateField) and field.auto_now:
value = datetime.date.today()
setattr(self, name.replace("`", ""), value)

if field.field_type == 'datetime' and value:
value = value.strftime('%Y-%m-%d %H:%M:%S.%f')
Expand Down
9 changes: 7 additions & 2 deletions nanorm_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ class Area(Model):
name = CharField()


def tomorrow():
return datetime.datetime.now() + datetime.timedelta(days=1)


class User(Model):
name = CharField(128) # CharField default="" max_length=255
age = IntegerField() # IntegerField default=0
Expand All @@ -22,13 +26,14 @@ class User(Model):
leader = SelfForeignKey()
join_date = DateField()
finish_time = DateTimeField()

expire_time = DateTimeField(default=tomorrow)
create_time = DateTimeField(auto_now_add=True)
update_time = DateTimeField(auto_now=True)

def __str__(self):
return "%s_%s_%s_%s_%s" % (self.__class__.__name__, self.id, self.name, self.age, self.sex)



# ==============================================

set_db_name("nanorm.db") # set database name to use
Expand Down

0 comments on commit 066903a

Please sign in to comment.