可以动态创建非托管模型。您只需要创建一个dict,将列名映射到数据值。一旦你有了它,你可以做以下事情:
from django.db import models
# This is the dict you created, mapping column names to values
values = {col_1: value_1, col_2: value_2, col_3: value_3, ... }
# Create a dict defining the custom field types, eg {col_name: django_field}
attrs = dict((c, models.CharField(max_length=100, blank=True, null=True)) for c in values)
# Add a Meta class to define the table name, eg table_1
class Meta:
app_label = myapp
db_table = 'table_1'
managed = False
attrs['Meta'] = Meta
attrs['__module__'] = 'path.to.your.apps.module'
DynamicModel = type('MyModel', (models.Model,), attrs)
# Save your data
DynamicModel.objects.create(**values)
把它包装成一个函数,放到
.save()
Record
. 如果有任何公共字段,可以将它们添加到
attrs
,甚至更好:创建一个包含所有公共字段的抽象模型,并继承上面最后一行的内容,而不是
models.Model