从数据存储中为django choicefield检索列表

时间:2018-06-19 02:06:32

标签: django datastore choicefield

在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,)

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

1 个答案:

答案 0 :(得分:0)

你可以为这样的表格编写一个init函数

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

如果要初始化表单,必须将用户参数传递给它,并将department_s选项更改为您想要的内容