【问题标题】:Django admin doesnot reflect dynmaic choices in choiceFieldDjango 管理员不反映choiceField 中的动态选择
【发布时间】:2016-07-19 07:05:16
【问题描述】:

我有 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) 时(假设又添加了一行),所以我期望它应该反映在模型 A 的选择中。 我刷新了管理面板,但它仍然没有显示。但是当我重新启动服务器 A(本地服务器)时,我可以在 ModelA(系统 A)选项中看到新添加的(在系统 B 中)行。

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

【问题讨论】:

  • choices 在这种情况下不是动态的。这是get_field1_list 在第一次调用时返回的内容。用ModelA.field1 = ForeignKey(ModelB) 设置ModelAModelB 之间的关系不是更好吗?
  • 它们都是独立的项目..我无法导入和直接使用外键

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


【解决方案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。你可以忽略它

【讨论】:

    猜你喜欢
    • 2015-06-17
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2010-11-26
    • 2013-09-27
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多