如何使用Django的原始查询获取choicefield的值?

时间:2017-10-23 03:17:35

标签: django django-models django-forms

我试图使用原始查询从数据库表中获取choicefield的值。我收到了通知

,而不是获取值
  

NameError未被用户代码处理。

任何帮助都将不胜感激。

forms.py

class SearchForm(forms.Form):

    def get_names():
        cursor = connection.cursor()
        get_query = str("SELECT distinct name from T_STUDENT")

        cursor.execute(get_query)
        results = cursor.fetchall()
        names = []
        i=0
        for row in results:
            names[i]=row[0]
            i+=1
        return names

    def names():
        data = get_names()
        i=0
        names= []
        for key,value in data:
            names.append(('i',value))
            i+=1
        return names

    validflg = forms.ChoiceField(label=("Names:"),
                                    choices = names(),
                                    widget = forms.Select({'class':'form-control'}))

1 个答案:

答案 0 :(得分:0)

编辑:

创建课程时,未定义names功能。您有两个选择:您可以创建支持函数,也可以将逻辑添加到构造函数中。

这是后者的样子:

class SearchForm(forms.Form):

    def get_names(self):
        cursor = connection.cursor()
        get_query = str("SELECT distinct name from T_STUDENT")

        cursor.execute(get_query)
        results = cursor.fetchall()
        names = []
        i=0
        for row in results:
            names[i]=row[0]
            i+=1
        return names

    def names(self):
        data = self.get_names()
        i=0
        names= []
        for key,value in data:
            names.append(('i',value))
            i+=1
        return names

    def __init__(self,*args, **kwargs):
        self.fields['validflg'] = forms.ChoiceField(label=("Names:"),
                                    choices = self.names(),
                                    widget = forms.Select({'class':'form-control'}))
        super(SearchForm, self).__init__(*args, **kwargs)

原始

你在Python中犯了一些基本错误。

def names():

这需要包括对象本身的引用:

def names(self):

然后你不能只调用方法,你也需要将它们附加到引用上。这不起作用:

data = get_names()

但这会:

data = self.get_names()