Django - 使用for循环从列表创建模型字段

时间:2014-07-13 18:10:35

标签: python django

我有100个标签的长列表,我需要我的模型作为字段,并且还要连续调用以在代码的其他部分访问它们。我将来需要修改它们,所以我希望能够在一个地方完成它。有一个简单的方法来做到这一点。例如:

labels = ['height', 'weight', 'age']

在models.py

class MyModel(models.Model):
    for label in labels:
        label = models.CharField(max_length=255)

以上是否等于:

class MyModel(models.Model):
    height = models.CharField(max_length=255)
    weight = models.CharField(max_length=255)
    age = models.CharField(max_length=255)

2 个答案:

答案 0 :(得分:6)

Django模型有一个add_to_class方法,可以在一个类中添加一个字段(或任何属性)。语法为MyModel.add_to_class(name, value)。结果代码为:

class MyModel(models.Model):
    pass

for label in labels:
    MyModel.add_to_class(label, models.CharField(max_length=255))

在内部,如果该方法存在,这将在传递的值上调用contribute_to_class方法。静态属性按原样添加到类中,但是字段具有此方法,并且随后将进行所有后续处理。

答案 1 :(得分:1)

使用locals()应该可以在这里工作:

class MyModel(models.Model):
    for label in labels:
        locals()[label] = models.CharField(max_length=255)

    del locals()['label']