我正在尝试根据现有模型中的字段动态生成新模型。两者都定义在/apps/main/models.py. 现有模型如下所示:
from django.db import models
class People(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    height = models.IntegerField()
我有一个包含要复制的字段名称的列表:
target_fields = ["name", "age"]
我想生成一个新模型,其中包含所有在 中命名的字段target_fields,但在这种情况下,它们应该被索引(db_index = True)。
我最初希望我能够遍历其类属性People并用于copy.copy复制其上定义的字段描述。像这样:
from copy import copy
d = {}
for field_name in target_fields:
    old_field = getattr(People, field_name) # alas, AttributeError
    new_field = copy(old_field)
    new_field.db_index = True
    d[field_name] = new_field
IndexedPeople = type("IndexedPeople", (models.Model,), d)
我不确定copy.copy()ing Fields 是否会起作用,但我没有深入了解:类定义中列出的字段实际上并未作为类对象的属性包含在内。我假设它们被用于一些元类恶作剧。
在调试器中四处寻找之后,我发现了某些类型的 Field 对象列在People._meta.local_fields. 但是,这些不仅仅是可以copy.copy()编辑和用于描述另一个模型的简单描述。例如,它们包含.model引用的属性People。
如何根据现有模型的字段为新模型创建字段描述?