Django: динамически определяемые модельные поля - PullRequest
1 голос
/ 17 мая 2011

У меня есть Модель с 100 одинаковыми полями с именами field_1, field_2 и так далее.Есть ли способ определить эти поля в цикле (просто чтобы не писать и не поддерживать 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(...)
    ...

Iхотелось бы что-то вроде:

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

но, конечно, мне не нравится eval.

Любой намек?

ПРИМЕЧАНИЕ Iнужна такая модель, потому что я делаю двухэтапный импорт из CSV / Excel: сначала я помещаю строки Excel в эту таблицу, затем обрабатываю таблицу и импортирую данные в фактическое приложение (где я использую ForeignKeys, как предложено)

1 Ответ

0 голосов
/ 17 мая 2011

Честно говоря, я не смотрел на это и не использовал его, но посмотрите этот фрагмент .Все дело в импорте CSV.

как выглядят ваши данные?Если это похоже на большинство листов Excel, поля находятся в столбцах, а данные - в строках.В этом случае, возможно, вам не нужно 100 полей в вашей модели, создайте поле для каждого столбца

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

, например, для этих данных нужно только 3 поля (или 4, если идентификатор явно указан),Вам не нужно (и не нужно) определять 100 полей для каждой строки.Теперь, если у вас есть 100 столбцов данных, возможно, есть причина для автоматизации, но иметь общие именованные поля кажется ... менее чем полезным.Поэтому, если данные всегда имеют один и тот же формат (в виде столбцов), может быть, стоит заняться работой в области описательной модели.

...