有没有办法初始化无类型类的属性?

时间:2019-08-01 18:26:11

标签: django

我的模型有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)

我正确吗?

0 个答案:

没有答案