我想要一个程序中所有模型的下拉框。
[我制作了一个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.apps.apps.get_models()
模块的顶层调用models
,因为当前正在填充模型的注册表。这将创建无限递归。
此外,在迁移时冻结了在模型级别定义的选择,因此,每次模型列表更改时,您都需要迁移。
最后,您可能要处理“旧式”模型的情况-如果从项目中删除模型,则指向该模型的记录将不再有效。
我也注意到您的提问始于
我想要我程序中所有模型的下拉框。
所以它看起来更多是出于UI目的?
无论如何:简单的解决方案是将choices
参数保留在模型之外,而仅以需要此模型选择的形式指定它。您可能还希望将规范的app_label.model_name
用作有效值,而仅使用详细名称进行显示(也就是说,除非您不关心有不可用的数据,否则)。