python - python - Django从数组生成模型字段

需要从这样的字符串数组生成DB模型:


strings = ['String 1', 'String 2', ..., 'String N-1', 'String N']



我需要在数据库中使用这种表格


ORIGIN | STRING 1 | STRING 2 |...| STRING N


 char | char | char |...| char



我创建了这样的模型类:


class FixedCharField(models.Field):


 def __init__(self, max_length, *args, **kwargs):


 self.max_length = max_length


 super(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)



 def db_type(self):


 return 'char(%s)' % self.max_length



class MyModel(models.Model):


 strings = get_my_array() # aux function to generate the array


 origin = FixedCharField(max_length=3)


 for string in strings:


 string = FixedCharField(max_length=3)



这是正确的方法?

时间:

这不能工作,因为你每次都覆盖item变量,直到最后一次覆盖它,这将是Django在类初始化后“看到"的项目。

你可以更新此类中的locals()字典:


class MyModel(models.Model):


 array = get_my_array()


 for item in array:


 locals()[item] = FixedCharField(max_length=3)

但还是看起来很丑,在这里为模型添加元素可能更好:


class MyModel(models.Model):


 # other fields


 pass



for item in get_my_array():


 FixedCharField(max_length=3).contribute_to_class(MyModel, item)

...