【问题标题】:Retrieve a list from Data store for django choicefield从 django 选择字段的数据存储中检索列表
【发布时间】:2018-06-19 02:06:32
【问题描述】:

在 forms.py 中,我将下拉列表定义如下:

DEPARTMENT_CHOICES = (
    ('SALES', 'sales'),
    ('TECH', 'tech'),
    ('HR', 'hr'),)
class MyForm(forms.Form):
    department_s = forms.ChoiceField(
    widget=forms.SelectMultiple,
    choices=DEPARTMENT_CHOICES,
    required=True,)

以这种方式可以正常工作。但我想根据用户名动态地从谷歌数据存储中检索选择列表。例如,如果 user1 正在访问表单,则检索其公司(例如公司 A)的部门列表。如果 user2 正在访问,则检索其公司(公司 B)的部门列表。用户列表和部门列表存储在数据存储中。我知道我可能需要从数据存储中获取密钥,但真的不确定如何正确执行此操作。任何机构都有此案例的示例代码?提前致谢!

【问题讨论】:

  • 使用 ModelChoiceField。
  • 是的,我以前听说过。我将搜索一些示例代码。谢谢!

标签: django datastore choicefield


【解决方案1】:

你可以为这样的表单编写一个初始化函数

class MyForm(forms.Form):
    department_s = forms.ChoiceField(...)

    def __init__(self, user, *args, **kwargs):
        super(MyForm, self).save(*args, **kwargs)
        # create department choice according to user
        query = Department.query(<any ndb query>).fetch
        DEPARTMENT_CHOICES = [[item.pk, unicode(item)] for item in query]
        self.fields['department_s'].choices = DEPARTMENT_CHOICES

当你想初始化你的表单时,必须将用户参数传递给它,它将部门的选择更改为你想要的

【讨论】:

  • 您好,非常感谢您的回答。你知道如何从谷歌数据存储中获取部门选择而不是在这里定义吗?因为它可能是一个很长的列表..而且是可变的。
  • 您可以根据需要设置部门中的任何内容。长列表可能会导致许多 ram 使用。列表更改会影响表单 init 方法。我更新答案
  • 谢谢!我会按照您的评论尝试查询。
猜你喜欢
  • 2019-07-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多