Django 如何使用POST request和filter()进行字段查找并通过html页面返回数据集?

Django 如何使用POST request和filter()进行字段查找并通过html页面返回数据集?,django,django-models,django-views,django-filter,Django,Django Models,Django Views,Django Filter,我想从用户那里获取属性'skill_required'和'desired_level'的值,根据这些值过滤数据库,并通过html页面'emptracker.html'发送匹配的数据行 问题是,我不知道如何通过html模板emptracker发送这些数据 查看页面的代码如下所示: def emptracker(request): if request.method == 'POST': skill_required = request.POST['skill_req

我想从用户那里获取属性'skill_required'和'desired_level'的值,根据这些值过滤数据库,并通过html页面'emptracker.html'发送匹配的数据行

问题是,我不知道如何通过html模板emptracker发送这些数据

查看页面的代码如下所示:

def emptracker(request):
   
    if request.method == 'POST':
        skill_required = request.POST['skill_required'],
        desired_level = request.POST['desired_level']

        from app8.models import empskillmapping
        orgdata = empskillmapping.objects.filter(skill_required = skill_required).filter(desired_level = desired_level)

    return render(request, 'emptracker.html',{'data': orgdata})
我在这里遇到一个错误,说orgdata超出范围,我就是不知道如何呈现这些数据

强调文本


这就是我要搜索的模型。

发生这种情况的原因是,如果有人发出GET请求,则未定义
orgdata
。因此,如果request.method==“POST”条件失败,您应该采取一些措施。例如,返回一个空查询集:

from app8.models import empskillmapping

def emptracker(request):   
    if request.method == 'POST':
        skill_required = request.POST['skill_required']
        desired_level = request.POST['desired_level'
        orgdata = empskillmapping.objects.filter(
            skill_required=skill_required,
            desired_level = desired_level
        )
    else:
        orgdata = empskillmapping.objects.none()
    return render(request, 'emptracker.html',{'data': orgdata})
从app8.models导入empskillmapping
def清空接收器(请求):
如果request.method==“POST”:
所需技能=请求。发布['skill\u required']
期望的水平=请求。发布['期望的水平'
orgdata=empskillmapping.objects.filter(
所需技能=所需技能,
所需水平=所需水平
)
其他:
orgdata=empskillmapping.objects.none()
返回render(请求'emptracker.html',{'data':orgdata})

注意:Django中的模型是用PerlCase编写的,而不是用snake_大小写, 因此,您可能希望将模型从
empskillmapping
重命名为
empskillmapping


注意:最好使用 而不是执行手动验证和数据清理。
表单
将不会 这不仅简化了在HTML中呈现表单,而且还使其更加方便 验证输入,并将数据清理为更方便的类型


这实际上是经过排序的,我使用下面的代码来获取这两个属性的值,并相应地过滤empskillmapping表

def清空接收器(请求):

我现在还有一个问题: 我想呈现具有特定技能的特定级别的员工的详细信息

为了实现这一点,我认为我必须在empskillmapping中使用外键通过“选择”来呈现另一个表中的数据,我该如何进行呢

“部门id”是员工和员工技能映射的外键

模型如下:

班级部门(模型.模型):

员工类别(models.Model):

类empskillmapping(models.Model):


您可以尝试
HttpResponse
而不是
render
。发生这种情况的原因是,如果有人发出GET请求,则未定义
orgdata
。感谢您的帮助!这实际上是排序的,我使用下面的代码获取两个属性的值,并相应地过滤empskillmapping表。
from app8.models import empskillmapping

def emptracker(request):   
    if request.method == 'POST':
        skill_required = request.POST['skill_required']
        desired_level = request.POST['desired_level'
        orgdata = empskillmapping.objects.filter(
            skill_required=skill_required,
            desired_level = desired_level
        )
    else:
        orgdata = empskillmapping.objects.none()
    return render(request, 'emptracker.html',{'data': orgdata})
value = request.POST.get('skill_required')
value1 = request.POST.get('desired_level')
selection = empskillmapping.objects.filter(skill_required =value).filter(desired_level=value1)
return render(request, 'emptracker.html',{'data': selection})
department_id = models.IntegerField(primary_key=True,null=False)
dept_name = models.CharField(max_length=20)
employee_id = models.CharField(max_length=255,primary_key=True,null=False)
username = models.CharField(max_length=20)
department_id = models.ForeignKey(department,on_delete=models.CASCADE,default="", editable= True)#foreign key to department
password = models.CharField(max_length= 30)
skill_required = models.CharField(max_length=20)
desired_level = models.ForeignKey(level,on_delete=models.CASCADE,default="", editable= True)
department_id = models.ForeignKey(department,on_delete=models.CASCADE,default="", editable= True)