【发布时间】:2014-07-03 13:02:16
【问题描述】:
我有一个类Foo 有两个字段:一个整数字段x,和一个逗号分隔的整数字段n。 n 的值表示x 中的元素个数。当我创建这个类的一个实例时,我想将x 设置为一组n 零,每个零用逗号分隔。
这是我目前的代码:
class Foo(models.Model):
n = models.IntegerField(default=0)
x = models.CommaSeparatedIntegerField(max_length = 100)
def __init__(self, _n):
super(User, self).__init__()
self.n = _n
self.x = [0,] * _n
这似乎可以很好地构造Foo 的实例。但是,当我以管理员身份登录并单击 Foo 实例之一时,它给了我错误:__init__() takes exactly 2 arguments (4 given)
我对此的解释是,当我要求查看它时,管理员试图创建一个 Foo 的实例,但没有提供必要的参数(尽管我不知道 4 given 的来源)。所以我的问题是:我应该如何编写带有参数的 Python 构造函数,以便实例也可以显示在管理页面中?
我能想到的另一种选择是保留默认构造函数,并在创建实例时编写f = Foo(n = 5)。但是,如何在默认情况下运行 self.x = [0,] * _n 行,而不必将其编写为单独的函数,以便在创建实例时调用?
【问题讨论】:
-
首先,请阅读:docs.djangoproject.com/en/1.6/ref/models/instances/… 您不应该覆盖方法签名。尝试使用
def __init__(self, *args, **kwargs),然后从kwargs获取您的价值
标签: django