我正在开发Django应用程序,我有以下错误
'Sheep' object has no attribute _state
我的模型是这样构建的
class Animal(models.Model):
aul = models.ForeignKey(Aul)
weight = models.IntegerField()
quality = models.IntegerField()
age = models.IntegerField()
def __init__(self,aul):
self.aul=aul
self.weight=3
self.quality=10
self.age=0
def __str__(self):
return self.age
class Sheep(Animal):
wool = models.IntegerField()
def __init__(self,aul):
Animal.__init__(self,aul)
我必须做什么?
答案 0 :(得分:21)
首先,您必须非常小心地覆盖__init__
以获得非可选参数。记住每次从查询集中获取对象时都会调用它!
这是您想要的正确代码:
class Animal(models.Model):
#class Meta: #uncomment this for an abstract class
# abstract = True
aul = models.ForeignKey(Aul)
weight = models.IntegerField(default=3)
quality = models.IntegerField(default=10)
age = models.IntegerField(default=0)
def __unicode__(self):
return self.age
class Sheep(Animal):
wool = models.IntegerField()
如果你只使用这个对象的子类,我强烈建议在Animal上设置抽象选项。这确保不为动物创建表格,仅为绵羊(等等)创建表格。如果未设置abstract,则将创建一个Animal表,并且Sheep类将被赋予它自己的表和一个自动“动物”字段,该字段将成为Animal模型的外键。
答案 1 :(得分:6)
http://en.cppreference.com/w/cpp/memory/shared_ptr建议您在模型中使用__init__
方法:
您可能想要通过覆盖
__init__
方法来自定义模型。但是,如果这样做,请注意不要更改调用签名,因为任何更改都可能阻止保存模型实例。不要覆盖var ref = Firebase(url:MY_FIREBASE_URL) ref.childByAppendingPath("some-child").observeSingleEventOfType( FEventType.Value, withBlock: { (snapshot) -> Void in for child in snapshot.children { let childSnapshot = snapshot.childSnapshotForPath(child.key) let someValue = childSnapshot.value["key"] as! String } })
,而是尝试使用以下方法之一:
- 在模型类
上添加classmethod- 在自定义管理器上添加方法(通常首选)
醇>