从表单中的数据创建对数据库的查询

时间:2017-08-15 08:31:05

标签: django django-models django-forms

我的代码

#model.py
class Personal(models.Model):
    name = models.CharField(db_column='FIO', max_length=255, blank=True, null=True)
    history_contract = models.CharField(max_length=255, blank=True, null=True)
    category = models.CharField(max_length=255, blank=True, null=True)

#form.py
class NameForm(forms.Form):
    name = forms.CharField(label='Name', max_length=100)
    history_contract = forms.CharField(label='History', max_length=100)
    category = forms.CharField(label='Category', max_length=100)

#view
def get_personal(request):
    if request.method == 'POST':
        form = NameForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']#data from form
            history = form.cleaned_data['history_contract']#data from form
            category = form.cleaned_data['category']#//data from form
            query = Sotrudniki.objects.filter(fio__contain=name, history_contract__contain=history, category__contain=category)#The part I want to accomplish

    else:
        form = NameForm()
    return render(request, 'personal.html', {'form': form, 'query': query})

我需要检查我在表单中输入的数据。在向数据库发出请求并仅返回我在表单中指示的数据之后。我在结束时“在赋值之前引用了”局部变量'查询'时出现错误,也许我对该任务有错误的方法。我该如何实现这个想法?

1 个答案:

答案 0 :(得分:1)

这是一个简单的逻辑错误。当表单不是POST时,query不存在,但您尝试将其发送到模板。您可以通过将query = None放在函数的开头来解决此问题。