【发布时间】:2013-01-22 16:35:29
【问题描述】:
我想为 Django 模型的实例添加自定义属性。这些属性不应存储在数据库中。在任何其他类中,属性将简单地由 __init__ 方法初始化。
我已经看到了三种不同的方法,但没有一种是完全令人满意的。我想知道是否有更好/更 Pythonic/djangoist 的方式来做到这一点?
-
Override
__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
在这三个选择中,第一个对我来说似乎是最差的。你怎么看?有什么选择吗?
【问题讨论】:
标签: python django django-models