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

问题描述 投票:1回答:1

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

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

    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='')

但是,由于这是在模型加载阶段发生的,因此出现错误“尚未加载模型。”解决该问题的方法是什么?

django django-models dropdown
1个回答
0
投票

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

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

最后,您可能要处理“旧式”模型的情况-如果从项目中删除模型,则指向该模型的记录将不再有效。

我也注意到您的提问始于

我想要我程序中所有模型的下拉框。

所以它看起来更多是出于UI目的?

无论如何:简单的解决方案是将choices参数保留在模型之外,而仅以需要此模型选择的形式指定它。您可能还希望将规范的app_label.model_name用作有效值,而仅使用详细名称进行显示(也就是说,除非您不关心有不可用的数据,否则)。

© www.soinside.com 2019 - 2024. All rights reserved.