我正在尝试为__init__我的一个模型编写一个函数,以便我可以通过执行来创建一个对象
p = User('name','email')
Run Code Online (Sandbox Code Playgroud)
当我写模型时,我有
def __init__(self, name, email, house_id, password):
models.Model.__init__(self)
self.name = name
self.email = email
Run Code Online (Sandbox Code Playgroud)
这是有效的,我可以将对象保存到数据库中,但是当我执行'User.objects.all()'时,除非取出我的User.objects.all()功能,否则它不会提取任何内容.有任何想法吗?
我想为Django模型的实例添加自定义属性.这些属性不应存储在数据库中.在任何其他类中,属性将仅由__init__方法初始化.
我已经可以看到三种不同的方法,而且没有一种方法是完全令人满意的.我想知道是否有更好/更多的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
Run Code Online (Sandbox Code Playgroud)使用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
Run Code Online (Sandbox Code Playgroud)使用实例方法而不是属性:引发一般异常,因为默认行为有点令人不安.
class Foo(Model):
def bar(self):
try:
return self.bar
except:
self.bar = 1
return self.bar
Run Code Online (Sandbox Code Playgroud)在这三个选择中,第一个看起来对我来说是最差的.你怎么看?还有其他选择