Last active
February 22, 2019 07:56
-
-
Save hirokiky/8f0c1ca9afdf3ccd72425f409d31bcd4 to your computer and use it in GitHub Desktop.
Model (for validators, ORM, form library) by using dataclass
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from dataclasses import dataclass, field as dc_field | |
# Library | |
def field(default, verbose_name="", help_text=""): | |
return dc_field( | |
default=default, | |
metadata={ | |
'verbose_name': verbose_name, | |
'help_text': help_text, | |
} | |
) | |
# mypy doen't recognize aliases for dataclass | |
# So we can't provide nice @model class decorator intead of dataclass | |
# https://github.com/python/mypy/issues/5383 | |
class Model: | |
def print_fields(self): | |
for name, field in self.__dataclass_fields__.items(): | |
print(field.metadata['verbose_name'], getattr(self, name)) | |
# User | |
@dataclass | |
class User(Model): | |
name: str = field("john", "名前", "User name") | |
user = User(name="hiroki") | |
user.print_fields() # 名前 hiroki |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment