Django admin不反映choiceField中的动态选择

时间:2016-07-19 07:05:16

标签: python django django-models django-forms django-admin

我有2个项目在2个不同的系统上运行。(称之为A和B)

在A中我有一个有一个动态选择字段的模型。

class ModelA(models.Model):
      field1 = models.CharField(max_length=255, choices=get_field1_list())
      #..some more fields

get_field1_list()函数中,我调用一个在系统B上运行的API,它返回一个来自ModelB(项目B)的元组列表(在选择字段中需要)

[(a,A), (b,B), (c,C)...]

现在,当我从管理面板对此模型(ModelB)进行更改时(假设再添加一行),我希望它应该反映在modelA选项中。 我刷新了管理面板,但它仍然没有显示。但是当我重新启动服务器A(本地服务器)时,我可以在ModelA(系统A)选项中看到新添加的(在系统B中)行。

所以我的问题是为什么会发生这种情况?如何在生产中解决此问题我可能不想每次都重启uwsgi或nginx。

1 个答案:

答案 0 :(得分:1)

在Django 1.9中,我这样做

from django.utils.functional import lazy

class ModelA(models.Model):

    field1 = models.CharField(max_length=255, blank=False, null=False)
    # ..

    def __init__(self, *args, **kwargs):
        super(ModelA, self).__init__(*args, **kwargs)
        self._meta.get_field('field1').choices = lazy(get_field1_list, list)()

请注意,我正在使用lazy。你可以忽略那个