Django モデルのインスタンスにカスタム属性を追加したいと考えています。これらの属性はデータベースに保存しないでください。他のクラスでは、属性は__init__
メソッドによって単純に初期化されます。
すでに 3 つの異なる方法があることがわかっていますが、どれも完全に満足できるものではありません。それを行うためのより良い/よりpythonic/djangoistな方法があるのだろうか?
メソッドをオーバーライドし
__init__
ます。構文は少し複雑ですが、機能します。from django.db.models import Model class Foo(Model): def __init__(self, *args, **kwargs): super(Model, self).__init__(*args, **kwargs) self.bar = 1
Django
post_init
シグナルを使用します。これはクラス定義の外にあるクラス コードを使用するため、あまり読みにくくなります。from django.dispatch import receiver from django.db.models.signals import post_init @receiver(post_init, sender=Foo) def user_init(sender, instance, *args, **kwargs): instance.bar = 1
属性の代わりにインスタンス メソッドを使用します。デフォルトの動作として一般的な例外が発生するのは、少し厄介です。
class Foo(Model): def bar(self): try: return self.bar except: self.bar = 1 return self.bar
これらの 3 つの選択肢のうち、最初の選択肢は、私にとって最も悪いものではないように見えます。どう思いますか?代替案はありますか?