如何在模型的循环中创建字段?

时间:2014-06-24 05:19:42

标签: django django-models

在我的项目中,我想创建一些存储统计数据的模型,在这些模型中,每小时会有一两个字段,可以说,至少有24或48个字段这些模型。

通常情况下,我必须为每个模型编写24或48个字段(具有相同的属性,不同的字段名称),它不那么优雅和高效。例如:

class Stats(models.Model)
    cnt_0 = models.IntegerField(default=0)
    ...
    cnt_23 = models.IntegerField(default=0)

是否可以在循环中或以任何其他方式创建这些字段?

2 个答案:

答案 0 :(得分:3)

无法以这种方式创建字段。更好的方法是创建另一个模型来保存这些属性的(name,value)

示例代码

class Stats(models.Model)
    #your fields

class Attributes(models.Model)
    name = models.CharField()
    value = models.IntegerField(default=0)

    stats = models.ForeignKey(Stats)

您可以添加统计数据所需的属性,并根据您的要求设置其他约束。

答案 1 :(得分:3)

如果存在静态数量的字段,则可以以更干的方式创建字段:

class Stats(models.Model):
    pass

for i in range(24):
    Stats.add_to_class('cnt_%s' % i, models.IntegerField(default=0)
for i in range(24, 48):
    Stats.add_to_class('cnt_%s' % i, models.IntegerField(default=0, null=True, blank=True)

此方法与将字段显式定义为类属性基本相同。主要区别在于,在将这些字段添加到类之前发送class_prepared信号。

对于动态数量的字段,请遵循Rohan的建议。