[英]Django Models: Generate field content from other fields in model instance
[英]Django generate Model Fields from an Array
我需要从这样的字符串数组生成一个数据库模型:
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)
如您所见,我需要每个列名的固定大小为 3,因此我使用了在此链接中找到的自定义 FixedCharField Fixed Char Field
我的问题是,这行得通吗? 这是执行此操作的正确方法吗?
这将不起作用,因为您每次都会覆盖item
变量,直到它最后一次被覆盖。 这将是 Django 在类初始化后“看到”的项目。
您可以为此更新类中的locals()
字典:
class MyModel(models.Model):
strings = get_my_array()
for string in strings:
locals()[string] = FixedCharField(max_length=3)
但它仍然看起来非常丑陋。 在这里将您的元素贡献给模型可能会更好:
class MyModel(models.Model):
# other fields
pass
for string in get_my_array():
FixedCharField(max_length=3).contribute_to_class(MyModel, string)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.