Django 如何添加包含程序中所有不同类型模型的下拉框?

Django 如何添加包含程序中所有不同类型模型的下拉框?,django,django-models,dropdown,Django,Django Models,Dropdown,我想要一个包含我程序中所有模型的下拉框 我制作了一个myModels模型,它的charfield值为100。我尝试添加选择元组,然后在模型中引用它 helper_choices = [] for my_model in django.apps.apps.get_models(): helper_choices.append((my_model._meta.verbose_name, my_model._meta.verbose_name)) MODEL_C

我想要一个包含我程序中所有模型的下拉框

我制作了一个myModels模型,它的charfield值为100。我尝试添加选择元组,然后在模型中引用它

    helper_choices = []
    for my_model in django.apps.apps.get_models():
        helper_choices.append((my_model._meta.verbose_name, my_model._meta.verbose_name))
    MODEL_CHOICES = tuple(helper_choices)
    model_name = models.CharField(max_length=100, choices=MODEL_CHOICES, default='')


然而,由于这是在加载模型阶段发生的,我得到一个错误“模型尚未加载”。这个问题的解决方法是什么

确实不可能从
models
模块的顶层调用
django.apps.apps.get_models()
,因为当前正在填充模型的注册表。这将创建一个内递归

此外,在模型级别定义的选择在迁移中被冻结,因此每次模型列出更改时,您都需要迁移

最后,您可能希望处理“遗留”模型的情况—如果您从项目中删除模型,指向该模型的记录将不再有效

我还注意到你的问题是从

我想要一个包含我程序中所有模型的下拉框

所以它看起来更像是为了用户界面


无论如何:简单的解决方案是将
choices
参数保留在模型之外,只在需要此模型选择的表单中指定它。您可能还希望使用规范的
app\u标签。model\u name
作为有效值,并且仅使用详细名称进行显示(除非您不关心有不可用的数据)。

您使用哪个组件来呈现下拉列表?Django表格?