我的模型有2个班级。我想初始化一个类,其中一个属性应该包含另一个类(仅供参考)。
我的模型很简单:
class Base (models.Model):
class Meta:
abstract = True
class Foo(Base):
model = None
field = models.CharField(max_length = 255)
field2 = models.IntegerField()
class Bar(models.Model):
pass
我打开shell并打开ttying来初始化Foo的实例:
f = Foo(model = Bar)
不幸的是我遇到了一个错误:
TypeError:Foo()获得了意外的关键字参数“模型”
我应该如何正确地将此参数传递给Foo-constructor?
我只是想不覆盖__init__
编辑
我对此情况进行了一些调查。
Foo类是从models.Model继承的,这就是为什么内置构造函数仅对连接到该类的属性起作用的原因。
这就是为什么我可以传递定义为models.CharField()
的kwargs参数的原因,因为CharField是“模型家族”中的类。
但是如果我在上面的示例中未将char属性(字段)定义为
field = models.CharField()
但是作为field = "Test string"
,我无法将关键字“字段”传递给Foo构造函数(因为Foo是从模型继承的,但是Foo属性字段是-不是)。
这有点奇怪,因为我认为默认情况下,原始数据类型(char,int,bool等)应该由类初始化程序进行处理。
所以解决方案是将初始化包装到另一个函数中:
class Foo(Base):
model = None
...
def initialize (self, context = None)
f = Foo()
f.model = context
...
...
f = Foo(Bar)
我正确吗?