Django:动态定义模型字段

时间:2011-05-17 10:26:55

标签: django dynamic django-models

我有一个名为field_1field_2的100个相同字段的模型,依此类推。 是否有方法在循环中定义这些字段(只是为了避免编写和维护100行)?

也就是说,现在我必须分别命名每个字段:

class MyModel(models.Model):
    field_1 = models.CharField(...)
    field_2 = models.CharField(...)
    field_3 = models.CharField(...)
    field_4 = models.CharField(...)
    field_5 = models.CharField(...)
    ...

我想要像:

class MyModel(models.Model):
    for i in range(1, 101):
        eval("field_%d = models.CharField(...)"%i)

但是,当然,我不喜欢eval

任何提示?

注意 我需要这样一个模型,因为我正在从CSV / Excel中进行两步输入:首先,我将Excel行放入此表,然后处理表并在实际应用程序中导入数据(我使用的是ForeignKeys,如所建议的)

2 个答案:

答案 0 :(得分:3)

您可以查看以下链接:How to dynamically add fields to a Django model

答案 1 :(得分:0)

老实说,我没有看过这个或使用它,但请查看 this snippet 。这都是关于CSV导入的。

您的数据是什么样的?如果它像大多数Excel工作表一样,则字段在列中,数据在行中。在这种情况下,您可能不需要模型中的100个字段,为每个列创建一个字段

+-----+---------+----------+-------+
| id  |  name   |  address | phone |
+-----+---------+----------+-------+
| 1   | person1 |   blah   |  foo  |
| ... |   ...   |   ...    |  ...  |
| 100 |person100|   bar    |  baz  |

例如,此数据只需要3个字段(如果明确定义了ID,则为4个字段),您不需要(也不应该)为每行定义100个字段。现在,如果你有100列数据,那么可能有理由想要自动化,但是通用命名字段似乎......不太有用。因此,如果数据始终采用相同的格式(就列而言),则可能值得将腿部工作放入描述性模型字段中。